[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Баг PHP PDO
Invis1ble
Всем привет.
Столкнулся с одним ОЧЕНЬ неприятным багом, а именно: при нескольких statements, один из которых с ошибкой, в одном запросе PDO не кидает исключение и не возвращает никаких ошибок, т.е. втихую делает вид, что все пучком.
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
));


$query = "
SELECT 1;
invalidstatement
"
;

try
{
$result = $pdo->query($query);

var_dump($pdo->errorInfo());
}
catch (Exception $e)
{
$error = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
);


var_dump($error);
exit;
}

echo 'ok';

Имеется много километровых запросов, необходимо как-то реализовать обработку возможных ошибок. Вопрос - как?

PS. Для справки: https://bugs.php.net/bug.php?id=61613
PPS. У кого повторяется проблема - проголосуйте за баг по указанной выше ссылке.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

johniek_comp
Invis1ble
хм...а реально. если несколько запросов и в одном ошибка то ничего не выбрасывает smile.gif а под 5.4 тестил?

_____________
user posted image
Invis1ble
johniek_comp
у меня 5.4.0

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Guest
Да, есть такое. Наверное он отсекает всё что после символа ; и пускает в запрос, а перед ним запрос впринципе корректный.
Placido
Попробуй сделать каждый запрос отдельным ->query(). У меня была подобная проблема - несколько запросов в одном prepare() в блоке try не работают, а несколько prepare (по одному запросу на prepare) - все ОК:
http://stackoverflow.com/questions/9588862...rk-in-try-block
http://stackoverflow.com/questions/9614876...e-a-transaction
Реального решения никто не предложил, очевидно, это тоже баг PDO.
Invis1ble
Placido
Да, все это очень печально... Прийдется разбивать на отдельные запросы, другого выхода я тоже не нашел sad.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

VELIK505
Есть этот баг в 5.4.8 он поправлен.
johniek_comp
под убунтой где 5.4 все работает, бага нет...

_____________
user posted image
vital
Цитата (Invis1ble @ 4.11.2012 - 12:23)
Placido
Да, все это очень печально... Прийдется разбивать на отдельные запросы, другого выхода я тоже не нашел  sad.gif

Обернуть в функцию в бд( CREATE PROCEDURE или как там оно в вашей бд) и вызывать напрямую в бд?

ОБернуть в транзацкию?

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Invis1ble
vital
Цитата
ОБернуть в транзацкию?

оно и так в транзакции
Цитата
Обернуть в функцию в бд( CREATE PROCEDURE или как там оно в вашей бд) и вызывать напрямую в бд?

а вот это идея, пожалуй так и сделаю (только не в процедуру, а в функцию, т.к. нужно передавать параметры в запрос)

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

VELIK505
У нас 5.3.10 стоял пых был баг обновили до последнего 5.4.8 бага уже не было поэтому и сказал что поправили баг но точно в какой версии незнаю может и в раних поправили.
Invis1ble
это конечно хорошо, но на хосте нет возможности обновиться

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
Invis1ble
вариант с Mysqli не рассматривается?
Invis1ble
killer8080
нет, к сожалению smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
Invis1ble
жаль, а то можно было бы так user posted image
Свернутый текст
$db = new mysqli('localhost', 'root', '');
$q = "
select 1;
SELECT 1;
invalidstat;
"
;


$i = 0;
if($db->multi_query($q)){
do{
$i++;
$db->use_result();
echo $i . ' query ok<br />';

} while($db->next_result());
}
if($db->error)
echo ++$i . ' query error:<br />' . $db->error;

$db->close();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.