0

このコードを使用して、レコードを更新し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印刷されます。
ただし、サーバーが混雑している場合、「failed」文字列は「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を返しますか?

4

2 に答える 2

1

mysql_query が NULL を返した場合、それは PHP のバグです。実際に NULL を返していることをどのように知ることができますか?

update ステートメントの場合、mysql_query は TRUE または FALSE のみを返す必要があります。したがって、エラー チェック コードは問題ありません。何がうまくいかなかったのかを知るには、他の関数を呼び出す必要があります。したがって、false ブロック内に mysql_error() の値を出力します。このような:

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

これを行うと、おそらく「レコードが更新されたが、戻り値が false である」という手がかりが得られるでしょう。それは起こるべきではありませんでした。

于 2013-01-03T08:21:19.223 に答える
0

この場合の$resultは単なるリソースであり、理由は含まれていません。

他のタイプの SQL ステートメント、INSERT、UPDATE、DELETE、DROP などの場合、mysql_query() は成功時に TRUE を返し、エラー時に FALSE を返します。

出典: PHP マニュアル

したがって、更新クエリでは TRUE / FALSE しか取得できません。理由は教えてくれません。しかし、あなたが言ったように、サーバーが過密になったときに発生するため、理由はおそらく「接続が多すぎる」ことです

于 2013-01-03T08:12:56.103 に答える