想给自己鼓个掌嘻嘻嘻~~我好像终于开始学会看错误信息了,最起码,看到满眼的红色错误不是畏惧而是开始找原因了~
目的
我在上一篇笔记中已经写好了mySql中的存储过程,并且现在在mySql中调用该存储过程也没有问题了,现在,我想要通过PHP调用该存储过程。主要是参数的设定不太好处理,需要从表单拿数据,在提交修改的表单之后,会得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| $_GET = [ 'r' => 'category/update', 'id' => 'c1', ];
$_POST = [ '_csrf-backend' => '9ueFt7KZe6r4VcicSw6wY4APsVfqiA8RtZwzfESZSQGFn7XExdozxr8ku9F6PeUk5HaCYKjMS3WB9lcjENIfUw==', 'Category' => [ 'catid' => 'c1', 'catname' => '篮球', 'price' => '99', ], ];
$_COOKIE = [ 'advanced-backend' => 'pgnho9lendv91620mh8550ev5p', '_identity-backend' => 'c8280c8419576224c687b72352e3857f7a00c329ecb950cd464196e40ab17045a:2:{i:0;s:17:"_identity-backend";i:1;s:46:"[2,"duWP0ncSYE-Rp1HhKBb8ncPdZULCl7yd",2592000]";}', '_csrf-backend' => '6e9b91d151f1e7590262068eb1f645cd9440d436961faaefed7c4e0996111199a:2:{i:0;s:13:"_csrf-backend";i:1;s:32:"sx0swCHlGqsM13UGdy37BDDd4jd_TKVR";}', ];
$_SESSION = [ '__flash' => [], '__returnUrl' => '/yii2/sport_equipment/backend/web/', '__id' => 2, ];
|
然后PHP代码中经过判断,调用update()函数,在这里,想要获取catid和price,使用如下语句:
1 2 3 4 5
| $Category = $_POST['Category']; $tmpcatid=$Category['catid']; $price=$Category['price']; var_dump($catname,$price); exit(0);
|
从得到的结果中看出,我们已经成功获取参数啦~
1
| string(2) "c1" string(3) "120"
|
然后就方便了:
1 2 3
| $db = Yii::$app->db; $db->createCommand("set @p0=$catid,@p0=$price")->execute(); $db->createCommand("call pro_update(@p0,@p1)")->execute();
|
好吧,问题又来了——catid现在的值是c1,但实际上我应该给@p0的是‘c1’,报错信息:
1 2 3 4 5 6 7 8 9 10 11
| SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c1' in 'field list' The SQL being executed was: set @p0=c1,@p0=99 Error Info: Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'c1' in 'field list' ) ↵ Caused by: PDOException SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c1' in 'field list'
|
所以大概是要用到php的字符串连接了
语法:
1 2 3 4 5 6
| $s1='i'; $s2=' love '; $s3='u'; $s4=$s1.$s2.$s3.$s4;
$catid="'".$tmpcatid."'";
|
最后的问题在于,我发现这句话没有起作用哇…这可如何是好,留到明天解决吧…至少这个command在MySQL里的执行是没有问题的了,大概是要换一种PHP的写法哦(Path:common\models\Category.php)
1
| $db->createCommand("SET @p0=$catid; SET @p1=$price; CALL `proc_update`(@p0, @p1);")->execute();
|
试了另外一种方法,还是不行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $Category = $_POST['Category']; $tmpcatid=$Category['catid']; $price=$Category['price'];
$catid="'".$tmpcatid."'";
|
未解….
作为补偿,在这里记一下PHP中单引号和双引号的区别:
PHP中单引号和双引号的区别
在PHP中,字符串的定义可以使用英文单引号’ ‘,也可以使用英文双引号” “。一般情况下两者通用的。但双引号内部变量会解析,单引号则不解析。双引号中的变量($var)和特殊字符(\r\n之类)会被转义。单引号中的内容不会被转义,总被认为是普通字符,因此效率更高。
1 2 3
| $str='hello'; echo "str is $str"; echo 'str is $str';
|
看颜色也就能看出区别吧。