Ну, ваша ошибка делает это довольно ясно: ваш $placeholder
массив не содержит одинаковое количество заполнителей, как у вас есть параметры в вашем $query
массиве.
Проверьте код здания $placeholder
и $query
массивов. Если вы не можете найти проблему, добавьте этот фрагмент кода в свой вопрос.
ОК, извините, я не привык к mysqli
. Очевидно, вы должны передать все параметры за один звонок до bind_param
. Это раздражает, но есть обходной путь.
Функция call_user_func_array
позволяет передавать аргументы функции в виде массива.
Таким образом, вы можете:
- построить строку типов проходом по параметрам;
- сделать массив
$params
с этой строкой с индексом 0 и значениями параметров при последующих индексах;
- звонок
call_user_func_array(array($insert, 'bind_param'), $params);
.
Это будет выглядеть следующим образом:
$insert = $this->db->prepare('INSERT INTO '.$tableName.' ('.implode($colum, ', ').') VALUES ('.implode($placeholder, ', ').'); ');
$values = array();
for ($i=0 ; $i<$count ; $i++) {
$types .= $query[$i]['type']; // this needs to be one single character from [idsb]
$values[] = $query[$i]['value'];
}
$params = array_merge(array($types), $values);
call_user_func_array(array($insert, 'bind_param'), $params);
Пожалуйста, опишите вашу проблему дальше. Вы получили сообщение об ошибке? Вы пытались отладить свой код, повторяя строку запроса и содержимое '$ query'? – Pikrass
Я получаю эту ошибку: «Warning: mysqli_stmt :: bind_param(): Число переменных не соответствует количеству параметров в подготовленном сообщении». Tnx для ответа :). – Roman
Вы можете использовать 'array_fill', чтобы получить точно' $ count' элементы в '$ placeholder'. – Gumbo