PHP / MySQL的主机服务器崩溃/冻结

我不确定我是否完全错过了一些东西,所以我在问,希望成为一个更好的人。 所以我现在就要求原谅我的愚蠢,如果有的话。

我有一个由公司托pipe的客户端,现在正在指责我为客户端构build的网站,一次又一次地“崩溃”(或至less使其运行速度非常慢)。 不,这不是一个庞大的网站,任何复杂的脚本。 这是一个有评论function的博客。

他们告诉我这就是问题,因为从原木来看似乎只有一个问题:

www.xxxxxx.se xxx.xxx.xx.xxx [14 / Mar / 2011:05:08:02 +0100] fcgi_php_error:PHP警告:mysql_query()[function.mysql-query]:无法将结果集保存在/ home / t / xxxxx / www / include / php / newsfeed_full.php on line 66,PHP Warning:mysql_fetch_assoc():提供的参数不是在/ home / t / xxxxx / www / include / php / newsfeed_full中的有效MySQL结果资源。在线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 

问题是,我从来没有从testing中看到这些错误。 我从来没有能够以任何方式复制错误。 所以这显然是工作。

我的问题是,有什么可能是错的? 托pipe公司只是告诉我,我需要确保我的脚本可以处理他们的服务器可能发出的所有可能的错误。

同样的脚本运行在10-15其他托pipe服务完美没有任何问题,我从来没有任何问题与他们。

我是否缺less重要的东西? 当涉及到PHP时,我有一个很大的知识空白吗?

你根本没有任何error handling,这是一个问题。 如果你对mysql_query()的调用由于某种原因不起作用,它将返回FALSE。 然后交给mysql_fetch_assoc(),那也会失败。

你真的应该做一些基本的error handling,大致如下:

 $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()来做到这一点。

在防守方面进行编程,检查任何可能失败的错误情况,并就发生的情况提供有用的错误信息,这样会有更好的结果。