php – mysqli_multi_query不能与mysql条件注释查询可靠
我有一个问题与
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的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |