Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php mysqli bind_param参数计数错误_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

php mysqli bind_param参数计数错误

php mysqli bind_param参数计数错误,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,这里有很多关于这个问题的答案,但我找不到我的问题出在哪里 使用存储为属性的mysqli的DB类。准备、绑定和执行通过魔术调用方法触发: public static function __callStatic($name, $arg) { echo '<pre>'; var_dump($arg); echo '</pre>'; if($name == 'Prepare'){ self::$Stmt = self::$mysql

这里有很多关于这个问题的答案,但我找不到我的问题出在哪里

使用存储为属性的mysqli的DB类。准备、绑定和执行通过魔术调用方法触发:

public static function __callStatic($name, $arg)
{
    echo '<pre>';
    var_dump($arg);
    echo '</pre>';
    if($name == 'Prepare'){
        self::$Stmt = self::$mysqli->prepare(implode(', ', $arg));
        $return = self::$Stmt;
    }elseif($name == 'Bind')
        $return = self::$Stmt->bind_param(implode(', ', $arg));
    elseif($name == 'Execute')
        $return = self::$Stmt->execute();
    else
        $return = self::$mysqli->$name(implode(', ', $arg));
    if(!self::GetErr())
        return $return;
}
代码如下:

array(9) {
  [0]=>
  string(8) "sssssssi"
  [1]=>
  string(4) "user"
  [2]=>
  string(5) "first"
  [3]=>
  string(4) "last"
  [4]=>
  string(15) "email@email.com"
  [5]=>
  string(64) "$2a$10$Tw4eOkUYA6SX8WP8XJfKZeFfOM9htVRJyP0d1iYlka0jNCV/qPGzazakT"
  [6]=>
  string(7) "recover"
  [7]=>
  string(64) "$2a$10$LrfK2EdkRi6pPdx1tUtPWe8p24T8ISdQHYhW0N06RjbvCrU4Flqiie4jU"
  [8]=>
  int(1)
}
正如我所见,有8种类型和8个值与之配套

这里还有调用DB::Bind时的
var\u dump($arg)
输出

elseif($name == 'Bind'){
    foreach($arg as &$v)
        $Arg[] = &$v;
    $return = call_user_func_array(array(self::$Stmt, 'bind_param'), $Arg);
}
内爆(“,”,$arg)
返回单个字符串,因此它只获取一个参数。正确的方法是使用
调用用户函数数组()

然而,这并不像看上去那么明显
bind_param()
希望参数通过引用而不是值传递
\uu callStatic($name,$arg)
有一个值数组而不是引用,因此需要一个引用这些值的本地副本

解决方案:


DB::Bind('sss i'、$userName、$fName、$lName、$email、$password、$recQ、$recA、$admin)有9个。你真的需要这个“SSSSI”吗?是的,应该是这样的?首先是8种类型,然后是8个值。上次我查的时候。1) $userName,2)$fName,3)$lName,4)$email,5)$password,6)$recQ,7)$recA,8)$admin第9个值在哪里?———————查看文档。”SSI’是列类型所需的参数。s=字符串,i=int;尝试删除问号周围的引号。
array(9) {
  [0]=>
  string(8) "sssssssi"
  [1]=>
  string(4) "user"
  [2]=>
  string(5) "first"
  [3]=>
  string(4) "last"
  [4]=>
  string(15) "email@email.com"
  [5]=>
  string(64) "$2a$10$Tw4eOkUYA6SX8WP8XJfKZeFfOM9htVRJyP0d1iYlka0jNCV/qPGzazakT"
  [6]=>
  string(7) "recover"
  [7]=>
  string(64) "$2a$10$LrfK2EdkRi6pPdx1tUtPWe8p24T8ISdQHYhW0N06RjbvCrU4Flqiie4jU"
  [8]=>
  int(1)
}
elseif($name == 'Bind'){
    foreach($arg as &$v)
        $Arg[] = &$v;
    $return = call_user_func_array(array(self::$Stmt, 'bind_param'), $Arg);
}