Mysqli multi_query не выполняет все запросы

Я обновляю или вставляю несколько строк в таблицы базы данных, используя Mysqli и multi_query. Они отлично работают, когда я использую их на своем локальном сервере MAMP, но ломаются, когда я использую их онлайн. На удаленном сервере выполняются только три из четырех запросов...

Обе среды имеют PHP и mysql версии 5+ и включают «расширение PHP: mysqli». Единственная разница, которую я вижу, это версия phpMyAdmin. Удаленный сервер имеет 3.5.6, мой локальный сервер MAMP имеет 4.2.5. Может ли это иметь влияние?

Я, конечно, меняю пароли, и все переменные должны быть действительными, так как они работают локально.

Я в недоумении... Спасибо!

$mysqli = new mysqli("localhost", "root", "root", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$sql = "INSERT INTO categories (id, name, descr)  VALUES ('$id1', '$name1', '$descr1') ON DUPLICATE KEY UPDATE name='$name1', descr='$descr1';";
$sql.= "INSERT INTO categories (id, name, descr)  VALUES ('$id2', '$name2', '$descr2') ON DUPLICATE KEY UPDATE name='$name2', descr='$descr2';";
$sql.= "INSERT INTO categories (id, name, descr)  VALUES ('$id3', '$name3', '$descr3') ON DUPLICATE KEY UPDATE name='$name3', descr='$descr3';";
$sql.= "INSERT INTO categories (id, name, descr)  VALUES ('$id4', '$name4', '$descr4') ON DUPLICATE KEY UPDATE name='$name4', descr='$descr4';";

if (!$mysqli->multi_query($sql)) {
     echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
}else{
     echo("Succes.");
}
$mysqli->close()

ОБНОВЛЕНИЕ: Замена запросов одним запросом действительно работает, но не очень выполнима во всех сценариях и требует много переписывания... Использование жестко запрограммированных переменных не помогает.

$sql2 = "INSERT INTO categories (id, name, descr)  VALUES ('$id1', '$name1', '$descr1'), ('$id2', '$name2', '$descr2'), ('$id3', '$name3', '$descr3'),('$id4', '$name4', '$descr4') 
    ON DUPLICATE KEY UPDATE name=VALUES(name), descr=VALUES(descr)";

person Jorgos    schedule 08.02.2015    source источник
comment
@ Fred-ii-Может ли это быть проблемой? Те же утверждения работают локально...   -  person Jorgos    schedule 09.02.2015
comment
phpMyAdmin — это просто «инструмент для администрирования MySQL через Интернет», он не требуется и не влияет на функции mysql или php.   -  person t.niese    schedule 09.02.2015
comment
@Jorgos Я удалил свой комментарий. Это действительно. Я думал, что нужен SET, но после просмотра руководства оба метода действительны dev.mysql.com/doc/refman/5.6/en/insert.html   -  person Funk Forty Niner    schedule 09.02.2015
comment
Спасибо за подтверждение, @t.niese! Ожидал, что так оно и есть. Любая идея, что еще может вызвать другое поведение?   -  person Jorgos    schedule 09.02.2015
comment
Если виден результат только трех из четырех запросов и ошибок не возникает, то два из них имеют одинаковый ключ, иначе я не могу объяснить такое поведение. Но без структуры таблицы categories и конечной $sql, созданной на вашем пульте, это невозможно сказать.   -  person t.niese    schedule 09.02.2015
comment
Добавьте сообщение об ошибке в начало вашего файла (файлов) сразу после открывающего тега <?php. Например: <?php error_reporting(E_ALL); ini_set('display_errors', 1); посмотрите, даст ли это что-нибудь.   -  person Funk Forty Niner    schedule 09.02.2015
comment
Также попробуйте удалить лишние точки с запятой во всех ';";, чтобы они читались как '";.   -  person Funk Forty Niner    schedule 09.02.2015
comment
@ Fred-ii- Отчет об ошибках показывает мне некоторые ошибки, потому что я использую переменные php для вставки в код javascript, но ничего для запросов mysql. Кроме того, я вполне уверен, что эти точки с запятой необходимы. Их удаление вообще останавливает выполнение запроса. @t.niese Странно то, что только три из четырех вставляются, даже когда я просто вставляю (значение, которое не является ключом), не проверяя наличие существующих записей для обновления. Итак, серия $sql = "INSERT INTO categories (person_ID) VALUES ('$newID');"; $sql.= "INSERT INTO categories (person_ID) VALUES ('$newID');";   -  person Jorgos    schedule 09.02.2015
comment
Если переменные связаны с запросом, и вы получаете ошибки, это может объяснить это. Какие ошибки?   -  person Funk Forty Niner    schedule 09.02.2015
comment
Будет ли это ошибкой после изменения всех переменных на жестко закодированные значения?   -  person user4035    schedule 09.02.2015
comment
@ user4035 Спасибо, я попробовал, см. обновленный вопрос.   -  person Jorgos    schedule 09.02.2015


Ответы (1)