我使用了为所有项目构建的动态数据库类。刚刚开始一个新的,课程给我一个打嗝。这是我的代码,而不是细节。但是我通过最少的代码重新创建了错误。
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)
错误:警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数与绑定变量数不匹配
在任何人只是简单地说,计算你的变量之前。我有。可能现在超过50次。可不是闹着玩的。在一小时前,我开始使用变量,而不是将直接数据放入其中。 vref()只是将数组中的所有项目作为引用变量传递。我已经了解到参考文献不能掉以轻心。嘿。但我仍然无法弄清楚这一点,以及它的结果。
我有13列。将14个参数传递给bind_param()。
答案 0 :(得分:7)
简单的错误......呃。我讨厌那个。 Not my credit.
$bind = 'siiiiissssiss'; // No commas
答案 1 :(得分:0)
鉴于您的var_dump($arr)
:
[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]=>int(1325298618)
好像你的$bind
变量需要:
$bind = 's,i,i,i,i,i,s,s,s,i,i,s,i';
而不是
$bind = 's,i,i,i,i,i,s,s,s,s,i,s,s';