У меня возникла проблема с запросами условного комментария 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`, `value`) VALUES ('supports_full_text', '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_phppos", "phppos", "aaatex_phppos2");
$test2 = "
/*!50604 REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('test', '0') */;
/*!50604 REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('test', '1') */;";
mysqli_multi_query($conn,$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`, `value`) VALUES ('test', '1' at line 1
)
)
Пример 3 (Отказ, но выглядит как успех (см. ниже сообщение):
<?php
$conn = mysqli_connect("127.0.0.1", "aaatex_phppos", "phppos", "aaatex_phppos2");
$test3 = "
/*!40000 REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('test', '0') */;
/*!50604 REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('test', '0') */;
/*!50604 REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('test', '1') */;";
mysqli_multi_query($conn,$test3);
print_r(mysqli_error_list($conn));
Значение теста равно 0. Как и ожидалось.
Является ли это ошибкой в php или чем-то, что я делаю неправильно?
EDIT:
ПРИМЕЧАНИЕ. Я обнаружил, что когда запрос не выполняется, STOPS обрабатывает остальную часть файла. Таким образом, пример 3 все еще имеет ошибки во 2-м и 3-м запросах; Я просто не поймал все ошибки. Выполняется запрос 40000; но все, что НЕ запускается для текущей версии mysql, терпит неудачу как синтаксическая ошибка.