Я готовлюсь обновить живой веб-сервер с PHP 5.2.12 до 5.3.5. В процессе подготовки я выполнил обновление на втором сервере, который является зеркалом живого сервера (сервер «dev»). Оба сервера используют FreeBSD, и оба используют порты для установки PHP и MySQL. Живой сервер использует MySQL 5.0.89, недавно обновленный dev-сервер использует 5.1.54.
Следующий код выполняется должным образом на реальном сервере (PHP 5.2.12 / 5.0.89), возвращая значение только что вставленной строки AUTO_INCREMENT. Эта функция является частью класса базы данных, который используется по всему сайту, где «$ this -> _ private ['cn']» - ссылка на ресурс.
public function insert ($sql=false) {
@mysql_select_db($this->_private['db_name'], $this->_private['cn']);
$res = null;
if (false !== $sql) {
$query_obj = mysql_query($sql, $this->_private['cn']);
if ($query_obj)
$res = mysql_insert_id($this->_private['cn']);
}
return $res;
}
На сервере dev (5.3.5 / 5.1.54) возврат равен нулю. Примечание - не нуль (который возвращается в случае сбоя запроса), но НОЛЬ Я могу посмотреть на таблицу и убедиться, что новая строка действительно вставлена, а поле автоинкремента правильно перешло. Значение поля в настоящее время 121288, поэтому оно находится в пределах целочисленного диапазона PHP. Я даже заново создал код класса на простой странице и получил тот же результат. mysql_error () указывает на отсутствие сбоев. Отчет об ошибках установлен на E_ALL, а не на писк.
ARGH! Есть идеи?