加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – mysqli_multi_query不能与mysql条件注释查询可靠

发布时间:2020-12-13 13:38:00 所属栏目:PHP教程 来源:网络整理
导读:我有一个问题与 mysql条件注释查询,其中错误报告没有语法错误.在这种情况下,至少有一个查询实际上是用条件执行的. 我正在使用php 5.6.24和mysql 5.5.52-cll 示例1(成功): ?php$conn = mysqli_connect("127.0.0.1","aaatex_phppos","phppos","aaatex_phppos2
我有一个问题与 mysql条件注释查询,其中错误报告没有语法错误.在这种情况下,至少有一个查询实际上是用条件执行的.

我正在使用php 5.6.24和mysql 5.5.52-cll

示例1(成功):

<?php
$conn = mysqli_connect("127.0.0.1","aaatex_phppos","phppos","aaatex_phppos2");

$test1 = "
/*!40000 REPLACE INTO `phppos_app_config` (`key`,`value`) VALUES ('supports_full_text','0') */;
/*!50604 REPLACE INTO `phppos_app_config` (`key`,'1') */;";

mysqli_multi_query($conn,$test1);
print_r(mysqli_error_list($conn));
?>

supports_full_text的值为0.

示例2(失败):

<?php
$conn = mysqli_connect("127.0.0.1","aaatex_phppos2");

$test2 = "
/*!50604 REPLACE INTO `phppos_app_config` (`key`,`value`) VALUES ('test',$test2);
print_r(mysqli_error_list($conn));

错误收到:

Array
(
    [0] => Array
        (
            [errno] => 1064
            [sqlstate] => 42000
            [error] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
    /*!50604 REPLACE INTO `phppos_app_config` (`key`,'1' at line 1
        )

)

示例3(失败;但看起来像成功(见下面的消息):

<?php
$conn = mysqli_connect("127.0.0.1","aaatex_phppos2");

$test3 = "
/*!40000 REPLACE INTO `phppos_app_config` (`key`,$test3);
print_r(mysqli_error_list($conn));

测试值为0.

这是PHP中的错误还是我做错了?

编辑:

注意:我发现当查询失败时,STOPS处理文件的其余部分.所以例3在第2和第3查询中仍然有错误;我没有抓到所有的错误. 40000查询工作;但任何不运行当前的mysql版本失败作为语法错误.

你在这里有误解.你的mysql版本是5.5.52.这意味着你得到的结果是正确的.

当您在查询中说/ *!40000 … * /时,您所说的这个查询只能在高于4.0.0的mysql版本中执行.同样,/ *!50604 … * /表示这个查询执行的mysql版本应该高于5.6.04.记住,这些数字与mysql版本有关.不是php版本.

在您的第一次测试中,首次查询执行正常,因为您的mysql版本大于4.0.0.但是,由于您的mysql版本低于5.6.04,因此第二个查询将被跳过.这也是在其他两个测试中发生的.

但是我无法解释为什么你会收到语法错误,

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
    /*!50604 REPLACE INTO `phppos_app_config` (`key`,'1' at line 1

在第二次测试.可能是您在此处查询的查询不是您执行的实际查询.你能检查一下吗?因为我也做了所有这些测试(我有mysql 5.5以及php 5.6),我没有遇到任何错误.我只看到没有执行更高版本的查询.

有关更多阅读请参阅this article.希望我的答案帮助您.

更新

通过查看其他答案,似乎您正在面临一个罕见的bug.尝试更新您的mysql版本.如果问题仍然存在,可能是mysql API的错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读