При переносе PHP-скрипта с PHP 5.2 на PHP 5.3 я столкнулся со следующей проблемой: Общая цель скрипта - поиск данных. У меня есть процедура, которая добавляет данные на сервер MySQL. Так как она действительно повторяется, я переписал ее (некоторое время назад), чтобы использовать MySQLi, в частности подготовленные операторы, так как всего есть 3 возможных запроса. В любом случае, сейчас, на сервере PHP 5.3, скрипт падает на следующей строке:
mysqli_stmt_bind_result($prepCheck, $id1);
Где $prepCheck
создается с помощью $prepCheck = mysqli_prepare($con, $checkQuery) or die("Error");
. Запрос работает нормально на сервере MySQL ($checkQuery, то есть), и PHP-код тоже работал на предыдущем сервере.
Запуск скрипта с помощью strace
ничего не выявил, так как последнее, что в нем есть - это системный вызов для echo "Execute";
, который 29936 19:44:18 write(1, "Execute\n", 8) = 8
.
Объект соединения не FALSE
, и даже если бы это было так, он должен завершиться с другой ошибкой, верно?
А вот и самая странная часть: Эта процедура не дает сбоя, когда я запускаю сценарий, ограничивающий количество посещаемых страниц, и сценарий завершается успешно. Однако, когда я устанавливаю более высокий лимит, она терпит неудачу, всегда при первом вызове этой процедуры, и именно на этой строке.
Если у кого-нибудь есть какие-либо предположения, что может быть причиной этого, они будут глубоко признательны.
Я могу вставить код, если кому-то нужно увидеть большую картину, но процедура очень длинная и скучная до смерти (возможно, поэтому скрипт не работает :)).
Вот как начинается скрипт: error_reporting(E_ALL); ini_set('display_errors', '1');
.
Кроме "магической" Segmentation fault
никаких ошибок не сообщается. Я не использую APC.
Не уверен, что это имеет значение, но я использую CLI для запуска скрипта, а не веб-интерфейс.
Версия PHP - 5.3.8, версия MySQL - 5.1.56. Ограничение памяти установлено на 64MB.
EDIT: Сбой процедуры + часть другого кода выложены здесь: http://codepad.org/KkZTxttQ. Весь файл огромный и уродливый, и я считаю, что он не имеет отношения к делу, поэтому я пока не буду его выкладывать. Строка, которая дает сбой - 113.