PHP / MySQL服务器问题

时间:2011-03-22 13:13:21

标签: php mysql linux hosting lamp

我不确定我是否完全错过了这里的内容所以我要求,希望成为一个更好的人。所以我现在已经请求原谅我的愚蠢,如果有的话。

我有一个由公司托管的客户端,现在正在指责我为客户端构建的网站,一次又一次地“崩溃”(或者至少让它运行得很慢)服务器。这不是一个拥有任何复杂脚本的庞大网站。这是一个博客,带有评论功能。

他们告诉我这是问题,因为从日志中似乎只有一个问题:

  

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   第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方面,我是否有很大的知识差距?

4 个答案:

答案 0 :(得分:1)

也许他已经在他的机器上开启了警告,这不是错误,php告诉你一些警告。见http://php.net/manual/en/function.error-reporting.php

答案 1 :(得分:1)

可能是内存分配错误。你能重新启动MySQL服务器实例吗?

答案 2 :(得分:0)

当表损坏时,此错误很常见。您应该使用“操作”选项卡下的phpMyAdmin尝试“修复”表,或者我相信您可以运行“repair table newsfeed_comments”之类的查询。

可能存在一个边缘情况,即您构建的sql语句无效。尝试在屏幕或日志文件中捕获错误。

$sql = "SELECT * FROM `newsfeed_comments` WHERE `post_id` = '".$post_id."' && `reply_id` IS NULL ORDER BY `date` DESC";
$result = mysql_query($sql) or error_log(mysql_error());

答案 3 :(得分:0)

您可以通过在if($ result)语句中包装while循环来处理错误并进行一些调试。使用memory_get_usage()检查脚本的内存使用情况,使用ini_get('memory_limit');

检查内存限制
$sql = "SELECT * FROM `newsfeed_comments` WHERE `post_id` = '".$post_id."' && `reply_id` IS NULL ORDER BY `date` DESC";
echo "Memory limit: " . ini_get('memory_limit');
echo memory_get_usage();
$result = mysql_query($sql);
echo memory_get_usage();
if ($result) {
  $i = 0;
  while ($row = mysql_fetch_assoc($result)) {
    ...
  }
}