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

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

Обе среды имеют PHP и MySQL версии 5+ и включают в себя «PHP extension: 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)";

2

Решение

Исправлена ​​проблема с использованием «объектно-ориентированного стиля», как показано на php.net. Все еще не уверен, почему мой предыдущий подход работал только локально, но хорошо, давайте назовем это исправленным.

/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}

/* close connection */
$mysqli->close();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]