我使用此代码更新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?
答案 0 :(得分:1)
如果mysql_query返回NULL,那么这将是PHP上的一个错误。你怎么知道它实际上是返回NULL?
对于更新语句,mysql_query应该只返回TRUE或FALSE。所以你的错误检查代码很好。至于找出出了什么问题,你将不得不调用其他函数 - mysql_error()会让你弄清楚出了什么问题。因此,在false块中打印mysql_error()的值。像这样:
echo 'failed. SQL Err: '. mysql_error()
这样做,你可能会得到关于'记录如何更新,但返回值为假'的线索。它不应该发生。
答案 1 :(得分:0)
$ result 在这种情况下只是一个资源,它不包含原因。
对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等, mysql_query()成功时返回TRUE,错误时返回FALSE。
来源:PHP Manual
因此,您只能在更新查询中从中获取TRUE / FALSE。它不会告诉你原因。但正如你所说,当你的服务器过度拥挤时会发生这种情况,所以理由可能是“连接太多”