Назад | Перейти на главную страницу

Сбой / зависание хост-сервера PHP / MySQL

Я не уверен, что полностью упустил что-то здесь, поэтому прошу, надеюсь, стать лучше. Так что я уже сейчас прошу прощения за свою глупость, если таковая имеется.

У меня есть клиент, обслуживаемый компанией, которая теперь обвиняет веб-сайт, который я создал для клиента, в том, что он снова и снова «ломает» (или, по крайней мере, заставляет его работать очень медленно). И нет, это не огромный сайт со сложным скриптом. Это блог с функциями комментирования.

Они говорят мне, что это проблема, потому что, судя по журналам, проблема только одна:

www.xxxxxx.se xxx.xxx.xx.xxx [14 марта 2011: 05: 08: 02 +0100] fcgi_php_error: Предупреждение PHP: mysql_query () [function.mysql-query]: невозможно сохранить набор результатов в / home / t / xxxxx / www / include / php / newsfeed_full.php в строке 66, предупреждение PHP: mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результата MySQL в / home / t / xxxxx / www / include / php / newsfeed_full .php в строке 68

Строка 66:

$sql = "INSERT INTO `newsfeed_comments` (post_id, reply_id, date, name, text) VALUES ('".mysql_real_escape_string($post_id)."', '".mysql_real_escape_string($_POST['reply_id'])."', '".date('YmdHis')."', '".mysql_real_escape_string($_POST['name'])."', '".mysql_real_escape_string($_POST['text'])."')";
mysql_query($sql) or die(mysql_error());

Вывод $ sql:

INSERT INTO `newsfeed_comments` (post_id, reply_id, date, name, text) VALUES ('168', '111194', '20110322145339', 'Test 2', 'Test text 2')

Строка 68:

$sql = "SELECT * FROM `newsfeed_comments` WHERE `post_id` = '".$post_id."' && `reply_id` IS NULL ORDER BY `date` DESC";
$result = mysql_query($sql);
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
//and so on...

Вывод $ sql:

SELECT * FROM `newsfeed_comments` WHERE `post_id` = '168' && `reply_id` IS NULL ORDER BY `date` DESC

Проблема в том, что я никогда не видел этих ошибок во время тестирования. Мне ни разу не удавалось повторить ошибки. Так что это явно работает.

У меня вопрос, а что может быть не так? Хостинговая компания просто говорит мне, что мне нужно убедиться, что мой сценарий может обрабатывать все возможные ошибки, которые может выдать их сервер.

Тот же скрипт без проблем работает на 10-15 других хостингах, и у меня никогда не было проблем с ними.

Я упустил что-нибудь важное? Есть ли у меня большой пробел в знаниях о PHP?

У вас вообще нет обработки ошибок, и это проблема. Если ваш вызов mysql_query () по какой-то причине не работает, он вернет FALSE. Затем это передается в mysql_fetch_assoc (), и это тоже не сработает.

Вам действительно следует выполнить базовую обработку ошибок, что-то вроде этого:

$sql = "SELECT * FROM `newsfeed_comments` WHERE `post_id` = '".$post_id."' && `reply_id` IS NULL ORDER BY `date` DESC";
$result = mysql_query($sql);
if (!$result) {
     //do error handling and fail
}
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
...

это страница есть несколько хороших примеров того, как это сделать с mysql_fetch_assoc ().

Программируйте защитно, проверяйте условия ошибок для всего, что может привести к сбою, и создавайте информативные сообщения об ошибках о том, что произошло, и вы получите гораздо лучшие результаты.