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打印出来。
但是当服务器拥挤时,“失败”字符串被打印出来,“结果”变量没有任何值。
此查询始终正常工作,但有时会返回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?

对于更新语句 mysql_query 应该只返回 TRUE 或 FALSE。所以你的错误检查代码很好。至于找出哪里出了问题,您将不得不调用其他函数 - mysql_error() 会给您一个关于哪里出了问题的简介。所以在你的 false 块中打印 mysql_error() 的值。像这样:

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

这样做,您可能会知道“记录是如何更新的,但返回值是假的”。它不应该发生。

于 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 回答