Php Mysqli multi_查询未执行所有查询

Php Mysqli multi_查询未执行所有查询,php,mysql,mysqli,mamp,multi-query,Php,Mysql,Mysqli,Mamp,Multi Query,我正在使用Mysqli和multi_查询更新或插入数据库表中的多行。当我在本地MAMP服务器上使用它们时,它们工作正常,但当我将它们联机时,它们会崩溃。在远程服务器上,仅执行四个查询中的三个 这两种环境都有PHP和mysql版本5+,并包括“PHP扩展:mysqli”。我看到的唯一区别是phpMyAdmin版本。远程服务器有3.5.6版本,本地MAMP服务器有4.2.5版本。这会有影响吗 我当然在更改密码,所有变量都应该是有效的,因为它们在本地工作 我不知所措。。。谢谢 $mysqli = ne

我正在使用Mysqli和multi_查询更新或插入数据库表中的多行。当我在本地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)";

使用“面向对象样式”修复了此问题,如所示。仍然不确定为什么我以前的方法只在本地有效,但好吧,我们称之为修复

/* 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();

@弗雷德二世——这可能是问题所在吗?这些同样的语句在本地也可以使用…
phpMyAdmin
只是一个“基于web的MySQL管理工具”,它不是必需的,也不会影响
MySQL
php
的功能。@Jorgos我删除了我的评论。这是有效的。我认为SET是必要的,但在看了手册之后,两种方法都是有效的,谢谢您的确认,@t.niese!预计情况就是这样。知道还有什么可能导致不同的行为吗?如果四个查询中只有三个查询的结果可以看到,并且没有错误发生,那么其中两个查询的键相同,否则我无法解释这种行为。但是如果没有
类别的表结构
和在远程设备上创建的最终
$sql
,就无法判断。