MySQL и связанные операторы, 2031: нет данных для параметров в оператореPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 MySQL и связанные операторы, 2031: нет данных для параметров в операторе

Сообщение Anonymous »

Вот мой код, он не работает, не знаю почему:

Код: Выделить всё

$sql = `INSERT INTO `_translations` (id, module, item_id, name_id, output, language) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE output = ?`
$stmt = mysqli_prepare($this->connection, $sql);
$params = array($stmt, $types);
foreach($array as $k=>&$v){
$params[] =& $v;
}
// this call is update call, therefore parameters are merged
if($update && $_update) $params = array_merge($params, $_update);
call_user_func_array('mysqli_stmt_bind_param', $params); # i think the problem is in this line..
if(mysqli_stmt_execute($stmt)){
if($this->transaction){ $this->affected++; }
else{ $this->affected = 1; }
}else{
$error = mysqli_stmt_error($stmt);
$errno = mysqli_stmt_errno($stmt);
die("{$sql}
".var_export($params, true)."
{$errno}: {$error}");
}
приводит к:

Код: Выделить всё

INSERT INTO `_translations` (id, module, item_id, name_id, output, language) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE output = ?
array (
0 =>
mysqli_stmt::__set_state(array(
'affected_rows' => NULL,
'insert_id' => NULL,
'num_rows' => NULL,
'param_count' => NULL,
'field_count' => NULL,
'errno' => NULL,
'error' => NULL,
'sqlstate' => NULL,
'id' => NULL,
)),
1 => 'isissss',
2 => '',
3 => 'seo',
4 => '',
5 => 'keywords',
6 => 'tesoutput',
7 => 'en',
8 => 'tesoutput',
)

2031: No data supplied for parameters in prepared statement
Ну, количество типов равно параметрам, и все должно работать нормально, но это не так. Поскольку эта же функция работает для простых вставок, я знаю, что она работает... Если с моей стороны потребуются дополнительные данные, не стесняйтесь спрашивать.

Есть решения?

Заранее спасибо!

ОБНОВЛЕНИЕ №1:

Вот $array, $types и $update print ауты.

P.S. Перед установкой каждой из этих трех переменных существует цепочка, но они содержат именно то, что необходимо!

Код: Выделить всё

// $array
array(6) {
["id"]=>
string(0) ""
["module"]=>
string(3) "seo"
["item_id"]=>
string(0) ""
["name_id"]=>
string(8) "keywords"
["output"]=>
string(9) "tesoutput"
["language"]=>
string(2) "en"
}
// $types
string(7) "isissss"
// $update
array(1) {
[0]=>
string(9) "tesoutput"
}
Я уже думал, что проблема может быть в том, что строка $types не обрабатывает типы значений $array, потому что там все значения являются строками. Однако я не уверен, потому что при вставке без обновления он работает, даже если это строки.

ОБНОВЛЕНИЕ № 2:

Похоже, это ошибка, связанная с версией, ошибка драйвера - http://bugs.php.net/bug.php?id=43568 ... Кому-нибудь удалось заставить это работать > 5.2 с mysqlnd? И да, здесь, на локальном хосте, я использую версию 5.2.6 с драйвером mysql по умолчанию, а на рабочем сервере PHP работает под управлением версии 5.3.5 с mysqlnd.

Подробнее здесь: https://stackoverflow.com/questions/566 ... -statement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»