строка определения типа не соответствует числу переменных связывания

Я использую динамический класс базы данных, который я построил для всех моих проектов. Просто начал с нового, и класс дает мне икоту. Это мой код, а не детали. Но я воссоздал ошибку с помощью минимального кода.

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 ().

Простая ошибка … Ух. Я ненавижу это. Не мой кредит.

 $bind = 'siiiiissssiss'; // No commas 

Учитывая ваш 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';