2011-03-22 4 views
1

내가 여기에 뭔가를 놓쳤다면, 나는 더 나은 사람이되기를 바랄 뿐이다. 그래서 나는 이미 지금 내 어리 석음에 대한 용서를 구한다.PHP/MySQL 서버 문제

저는 회사에서 호스팅하는 클라이언트를 가지고 있습니다. 이제는 클라이언트를 위해 작성한 웹 사이트를 비난하고 있습니다. 서버를 계속 "충돌"시키거나 (적어도 매우 느리게 실행시키는) 반복적으로 서버를 반복합니다. 그리고 이것은 복잡한 스크립트가있는 거대한 웹 사이트가 아닙니다. 코멘트 기능이있는 블로그입니다.

www.xxxxxx.se xxx.xxx.xx.xxx [14/Mar/2011:05:08:02 +0100] fcgi_php_error:PHP Warning: mysql_query() [function.mysql-query]: Unable to save result set in /home/t/xxxxx/www/include/php/newsfeed_full.php on line 66, PHP Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/t/xxxxx/www/include/php/newsfeed_full.php on line 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 :

,210

$의 SQL 출력 :

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

문제는 내가 시험에서 이러한 오류를 자신을 본 적이 한 것입니다. 어떤 방법 으로든 오류를 복제 할 수 없었습니다. 그래서 분명히 효과가 있습니다.

내 질문은 무엇일까요? 호스팅 회사는 스크립트가 서버가 제공 할 수있는 모든 오류를 처리 할 수 ​​있는지 확인해야한다고 말합니다.

동일한 스크립트는 아무 문제없이 10-15 다른 호스팅 서비스에서 완벽하게 실행되며 나는 그들과 전혀 문제가 없었습니다.

나는 중요한 것을 놓치고 있습니까? PHP에 관해서 많은 지식 격차가 있습니까?

+0

'fcgi_php_error와 메모리 제한을 확인 그것이 당신의 스크립트의 잘못이라면 놀랐습니다.무슨 일이 일어나는지보고 싶습니다 –

+1

PHP가 변수를 어떻게 풀어 내는지 보려면 $ sql의 출력을 게시 할 수 있습니까? 또한 현재 datetime을 저장하려면 mysql 함수를 사용할 수 있습니다. –

+0

Google 검색 결과 집합을 저장할 수 없음은 손상된 표 또는 메모리 제한을 초과하여 발생했다고 생각됩니다. – Hammerite

답변

1

아마도 메모리 할당 오류입니다. MySQL 서버 인스턴스를 재부팅 할 수 있습니까?

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()); 
+0

나는 이것을 시도 할 것이지만,이 오류가 자주 발생해서는 안된다. 서버 자체가 "작동 중"이라도 절대로 고장 나지 못했습니다. 그러나이 오류는 오류 로그에 있습니다. 테이블이 깨진 것은 내 잘못입니까? 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? 나를 괴롭히는 것은이 호스팅 회사가 내 모든 것을 비난하고 이전에 어떤 호스팅 회사와도 문제가 없었던 것입니다. – jamietelin

+0

로그에 얼마나 자주 오류가 표시됩니까? 테이블이 정기적으로 손상되면 아마도 하드웨어 또는 설치 문제 일 것입니다. –

+0

1 ~ 20 분마다 오류가 기록되는 것처럼 보입니다. 1 분에 최대 20 개의 오류가 발생할 수 있습니다. 동일한 오류가 발생합니다. 나는 많은 방문자가있을 것이라는 점에 놀랐다. 나는 의심 스럽다. – jamietelin

0

if ($ result) 문에서 while 루프를 래핑하여 오류를 처리하고 디버깅을 수행 할 수 있습니다. 저장할 수 없습니다 결과를 설정`이 매우 이상한 소리가 나는 것입니다 :()는 [function.mysql은 쿼리가]는 mysql_query를 : PHP 경고 : 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)) { 
    ... 
    } 
}