2013-01-03 103 views
0

mysql
使用此代碼更新記錄這是我的代碼:更新有時會返回Null

<?php 
    $query = "update seeds set status='success' where id = $x"; 
    $result = mysql_query($query); 
    if(!$result){ 
     echo 'failed'.$result; 
     print_r($result); 
    }else{ 
     echo 'successfully'; 
    } 

?> 

總是successfully打印出來。
但是,當服務器擁擠時,'失敗'字符串將被打印出來,'result'變量沒有任何值。
此查詢總是正常工作,但有時會返回NULL
我該如何解決這個問題?


有一個問題。
我使用此查詢的交易。 其實我實際的代碼是這樣的:

<?php 
. 
. 
. 
$QUERY_TRANSACTION = mysql_query('START TRANSACTION'); 
if(!$QUERY_TRANSACTION){ 
    echo "error 101" ; 
    exit; 
} 
$seed_query = "INSERT INTO seeds VALUES('','$username','$theTime','در انتظار')"; 
$seed_result = mysql_query($seed_query); 
if(mysql_affected_rows()!=1){ 
    $QUERY_TROLLBACK = mysql_query('ROLLBACK'); 
    echo "error 102";  
    exit;  
} 
$seed_id = mysql_insert_id();       
$_SESSION['SEED_ID'] = $seed_id; 

$query_values = "(NULL,'$list_number[0]',0,$seed_id)";     
for($i=1;$i<count($list_number);$i++){ 
    $query_values .= ",(NULL,'$list_number[$i]',0,$seed_id)"; 
}     
$r_query = "INSERT INTO rc_members VALUES $query_values"; 
$r_result = mysql_query($r_query); 
if(mysql_affected_rows()<=0){ 
    $QUERY_TROLLBACK = mysql_query('ROLLBACK'); 
    echo "error 103";  
    exit;  
} 
$QUERY_COMMIT = mysql_query('COMMIT'); 
//-------------- 
$QUERY_TRANSACTION = mysql_query('START TRANSACTION'); 
if(!$QUERY_TRANSACTION){ 
    echo "error 104" ; 
    exit; 
} 
$s_status = the_process($list_number,$m,$seed_id);           
if($s_status == 'successful_proc'){ 
    $s_query = "UPDATE seeds SET status='انجام شده' WHERE id=$seed_id";              
    $s_result = mysql_query($s_query); 
    //----------------logg file 
    $filename = "debug.txt" ; 
    $filepointer =fopen($filename ,"w") ; 
    fwrite($filepointer , print_r($s_result,true)) ; 
    fclose($filepointer) ;    
    //----------------------- 
    if(!$s_result){ 
     echo "error 105".$s_result;     
     exit; 
    } 
    $QUERY_COMMIT = mysql_query('COMMIT'); 
    echo 'successfuly process'; 
}else{ 
    $QUERY_TROLLBACK = mysql_query('ROLLBACK'); 
    echo 'error 106'; 
    exit; 
} 
$QUERY_COMMIT = mysql_query('COMMIT'); 

?> 

是「成功」總是打印出來。但有時會打印出'錯誤105'。

可能交易這個錯誤的原因是什麼?

在db中執行更新,但返回null?

+0

你寫這個來確定查詢後是否有更新? –

+0

而不是echo'failed'。$ result;使用echo'failed'.mysql_error(); – Kirtan

回答

0

$導致在這種情況下,僅僅是一種資源,它不包含的原因。

對於其它類型的SQL語句,插入,更新,刪除,DROP,等, 的mysql_query()返回TRUE或FALSE的成功上錯誤。

來源:PHP Manual

所以你只能得到TRUE /從中FALSE在更新查詢。它不會告訴你原因。但正如你所說的,當你的服務器是人滿爲患所以原因可能就是「太多的連接」

+0

謝謝你,我的朋友。 –

1

如果的mysql_query返回NULL它發生,那麼這將是在PHP的錯誤。你怎麼知道它實際上返回NULL?

對於更新語句的mysql_query應該只返回TRUE或FALSE。所以你的錯誤檢查代碼很好。至於發現哪裏出了問題,你將不得不調用其他函數 - mysql_error()會給你一個錯誤的地方。因此,在false塊中打印mysql_error()的值。像這樣:

echo 'failed. SQL Err: '. mysql_error() 

這樣做,你可能會得到關於'記錄是如何更新,但返回值爲false'的線索。它不應該發生。

相關問題