簡體   English   中英

在mysql_query中更新有時返回null

[英]update in mysql_query sometime return null

我使用此代碼更新mysql的記錄
這是我的代碼:

<?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打印出來。
但是,當服務器擁擠時,將打印出“失敗”字符串,而沒有“結果”變量的任何值。
此查詢始終可以正常工作,但有時會返回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”。

可能是交易是此錯誤的原因?

在數據庫中執行更新,但返回空?

如果mysql_query返回NULL,那將是PHP上的錯誤。 您怎么知道它實際上正在返回NULL?

對於更新語句,mysql_query應該僅返回TRUE或FALSE。 因此,您的錯誤檢查代碼很好。 至於找出出了什么問題,您將不得不調用其他函數-mysql_error()會給您一個關於出了什么問題的信息。 因此,在您的false塊中打印mysql_error()的值。 像這樣:

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

這樣做,您可能會知道“記錄是如何更新的,但是返回值是假的”。 它不應該發生。

在這種情況下, $ result只是一種資源,它不包含原因。

對於其他類型的SQL語句,例如INSERT,UPDATE,DELETE,DROP等,mysql_query()成功返回TRUE,錯誤返回FALSE。

資料來源: PHP手冊

因此,您只能在更新查詢中從中獲得TRUE / FALSE。 它不會告訴你原因。 但是正如您所說的,這是在服務器擁擠時發生的,因此原因可能是“連接過多”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM