类型定义字符串与绑定变量的数量不匹配

Ton*_*old 3 php mysqli prepared-statement

我使用我为所有项目构建的动态数据库类.刚刚开始一个新的,课程给我一个打嗝.这是我的代码,而不是细节.但我通过最少的代码重新创建了错误.

function vref($arr) {
  if (strnatcmp(phpversion(),'5.3') >= 0) {//Reference is required for PHP 5.3+
    $refs = array();
    foreach($arr as $key => $value) $refs[$key] = &$arr[$key];
    return $refs;
  }
  return $arr;
}

$bind = 's,i,i,i,i, i,s,s,s,s, i,s,s';
$reward = ( $data['reward'] ) ? $data['reward'] : '0';
$special = '0';
$icon = '0';
$mastery = ( @$data['mastery'] ) ? 'Yes' : 'No';
$added = time();
settype($added, 'string')
$arr = array(
        $bind,
        $data['name'],
        intval($data['cost']),
        intval($data['per']),
        intval($data['serv']),
        intval($data['earns']),
        intval($data['cp']),
        $data['cookTime'],
        $reward,
        $special,
        $icon,
        intval($data['type']),
        $mastery,
        $added );

$db = new mysqli(...);
$stmt = $db2->prepare('INSERT INTO recipe2 (
     `name`,cost,perserv,servings,earns,
     cp,cooktime,`unlock`,special,icon,
     `type`,options,added) 
   VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?) ');
call_user_func_array( array( $stmt, 'bind_param' ), vref($arr) );

// var_dump($arr)
array(14) {
[0]=> string(25) "s,i,i,i,i,i,s,s,s,s,i,s,s"
[1]=> string(18) "Bacon Cheeseburger"
[2]=> int(15)
[3]=> int(4)
[4]=> int(13)
[5]=> int(56)
[6]=> int(6)
[7]=> string(2) "5m"
[8]=> string(1) "0"
[9]=> string(1) "0"
[10]=>int(0)
[11]=>int(0)
[12]=>string(2) "No"
[13]=>string(10) "1325300795"
}

// Database Column listing
name        varchar(255)            
cost        int(10)
perserv     int(5)
servings    int(10)
earns       int(10)
cp      int(10)
cooktime    varchar(11)
unlock      varchar(255)
special     varchar(255)
icon        varchar(255)
type        int(5)
options     varchar(255)
added       varchar(12)
Run Code Online (Sandbox Code Playgroud)

错误:警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数与绑定变量数不匹配

在任何人只是简单地说之前,计算你的变量.我有.可能现在超过50次.可不是闹着玩的.在一小时前,我开始使用变量,而不是将直接数据放入其中.vref()只是将数组中的所有项目作为引用变量传递.我已经了解到参考文献不能掉以轻心.嘿.但我仍然无法弄明白这一点,而且它的结果令人沮丧.

我有13列.将14个参数传递给bind_param().

Ton*_*old 7

简单的错误......呃.我讨厌那个.不是我的功劳.

$bind = 'siiiiissssiss'; // No commas
Run Code Online (Sandbox Code Playgroud)