2011-09-04 3 views
0

정말 문제가 여기에 무엇을 이해하지, 내가 다 내가 문제를 진단 할, 나는 문제가 발생되고 생각 어디 분리 관리 할 수 ​​있습니다를 시도했습니다 (아래 분리 참조)MySQL 쿼리 아래에서 스크립트가 깨지지만 오류가 표시되지 않습니까?

는 여기 내 전체 코드 : 무작위로 선택된 URL이어야합니다

include("db_conn.php"); 
$conn = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); mysql_select_db($db_name) or die(mysql_error());; 

$timestamp = time(); 
$add_time = time()+(60*60); 

$query = "UPDATE links SET timestamp = '$add_time', hit_counter = '0' WHERE timestamp >= '$timestamp' AND overflow = 'NO'"; 
$result = mysql_query($query) or die(mysql_error()); 

$query = "SELECT * FROM links WHERE timestamp <= '$timestamp' AND hit_counter <= max_hits AND overflow = 'NO'"; 
$result = mysql_query($query); 

$size = mysql_num_rows($result) or die(mysql_error()); 

if($size == 0) { 
    $query = "SELECT * FROM links WHERE overflow = 'YES'"; 
    $result = mysql_query($query) or die(mysql_error()); 

    $overflow = array(); 
    while($row = mysql_fetch_assoc($result)) { 
     $overflow[] = $row['link']; 
    } 

    header("Location: http://www.google.com/?url=$overflow[0]"); 
} 

$links = array(); 
$hits = array(); 

while($rows = mysql_fetch_assoc($result)) { 
    $links[] = $rows['link']; 
    $hits[] = $rows['hit_counter']; 
} 


$key = rand(0,$size); 

$link = $links[$key]; 
$hit_counter = $hits[$key]+1; 

$query = "UPDATE links SET hit_counter = '$hit_counter' WHERE link = '$link'"; 
$result = mysql_query($query) or die(mysql_error());*/ 

echo $link; 
echo $hit_counter; 

mysql_close($conn); 
스크립트가 실행

, echo $link;, 아무것도 표시되지 않습니다.

문제를 진단하기 위해 나는 echo "Hello World!";을 점차적으로 스크립트로 옮기려고했는데 echo "Hello World!";이 초기 MySQL 쿼리 앞에 위치 할 때까지 아무 것도 표시되지 않아 문제가 있다고 믿게됩니다. 거기에는 아무런 mysql_error()'s도 인쇄되지 않습니다.

또한 $size = ... 아래 줄에 echo $size;을 시도했지만 아무 것도 표시하지 않습니다.

절연 :

$query = "UPDATE links SET timestamp = '$add_time', hit_counter = '0' WHERE timestamp >= '$timestamp' AND overflow = 'NO'"; 
$result = mysql_query($query) or die(mysql_error()); 

$query = "SELECT * FROM links WHERE timestamp <= '$timestamp' AND hit_counter <= max_hits AND overflow = 'NO'"; 
$result = mysql_query($query); 

$size = mysql_num_rows($result) or die(mysql_error()); 

사람이 스크립트의 나머지 부분이 실행되지 원인, 아직 오류를 반환하지 왜 어떤 생각을 가지고 있습니까?

도움을 주시면 감사하겠습니다.

+0

모든 mysql_query 호출에 die mysql_error()를 추가 할 수 있습니까? –

+0

죄송합니다. 내가 놓친 것을 실감하지 못했습니다. 지금 해드 리고 이에 따라 업데이트하겠습니다. – Avicinnian

답변

3

나는 문제가이 줄을 생각하십시오 NUM_ROWS가 반환 0를 호출 할 때 오류가 전혀없는 경우에도

$size = mysql_num_rows($result) or die(mysql_error()); 

은 인터프리터가 die(mysql_error()) 부분을 구문 분석합니다.

수업 : ... or die() 구조를 피하는 것이 가장 좋습니다. 대신 적절한 체크를하십시오 :

$size = mysql_num_rows($result); 

if ($size === false) die(mysql_error()); // or, even better, trigger_error() 
             // so mySQL errors aren't shown 
             // in production 
+0

네가 맞아, 고마워! 나는 타이머가 내려 가자 마자 귀하의 의견을 수락합니다 :)! – Avicinnian

관련 문제