Mam problem z mysql warunkowe komentarze kwerendy, w których zgłaszane są błędy bez błędu składni. Działa w przypadku, gdy co najmniej jedno z zapytań faktycznie jest wykonywane z warunkiem warunkowym.mysqli_multi_query nie działa niezawodnie z mysql warunkowym komentarzem zapytań
ja pomocą php 5.6.24 i mysql 5.05.52-CLL
Przykład 1 (sukces):
<?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));
?>
wartość supports_full_text jest 0, jak oczekiwano.
Przykład 2 (niepowodzenie):
<?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));
błędów odbieranych:
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
)
)
Przykład 3 (usterka, ale wydaje się, jak sukces (patrz poniżej komunikat)
<?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));
testu wartość 0 zgodnie z oczekiwaniami.
Czy jest to błąd w php lub coś, co robię źle?
EDIT:
UWAGA: Okazało się, że gdy zapytanie nie zatrzymuje przetwarzanie resztę pliku. Tak więc przykład 3 nadal zawiera błędy w drugim i trzecim zapytaniu; Po prostu nie złapałem wszystkich błędów. Zapytanie 40000 działa; ale wszystko, co NIE działa dla aktualnej wersji mysql, zawodzi jako błąd składni.
Właśnie testowany przykład nr 3. pracował bez żadnego problemu na MySQL 5.7.16 i PHP 7.0.8. – ICE
@ICE Wyjaśniłem, dlaczego możesz uruchomić go bez problemu w mojej odpowiedzi. Komentarz warunkowy '/ *! 50604 * /' oznacza, że zapytanie powinno zostać wykonane tylko wtedy, gdy wersja mysql jest wyższa niż '5.6.04'. Masz wyższą wersję, więc możesz ją uruchomić. –
@ImeshaSudasingha Przeczytałem twoją odpowiedź i głosowałem w górę. Skomentowałem tutaj, ponieważ widziałem, że otrzymał błąd dla zapytania. – ICE