我需要通过php更新表格。 我需要响应将是Ok或Error。 基本上,如果字段值不为零,我需要将字段值减1。 如果字段值为零,我尝试强制产生错误,用字符串值
替换数字字段SQL语句是:
$query = "Update mytable set myfield = if( myfield > 0 , myfield - 1 , 'AAA') where cliente_id = $cual_ID";
在此之后,php代码为:
if (mysql_query($query))
{
echo "OK";
}
else
{
echo "Error 4";
}
mysql_close($link);
当我运行php时,它总是返回OK,当myfield大于零时。
有什么想法吗?
答案 0 :(得分:2)
不是产生错误,而是可能的解决方案是为更新语句的WHERE
子句myfield > 0
引入附加条件,并使用mysql_affected_rows()
查看行是否已更新
$query = "UPDATE mytable
SET myfield = myfield - 1
WHERE cliente_id = $cual_ID
AND myfield > 0";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
if (mysql_affected_rows() == 1) {
echo "OK";
} else {
echo "Error 4";
}
mysql_close($link);
旁注:而不是插值查询字符串,请考虑将 prepared statements 与mysqli_*
或PDO
一起使用
答案 1 :(得分:0)
您正在完整地验证布尔返回:
if (mysql_query($Query) === true){
// Mysql is returning true
echo "OK";
}else{
//MySQL is returning false
}
您需要使用查询执行其他任务..例如:
$Query = mysql_query($query);
if (mysql_num_rows($Query) > 0){
// Rows detected are greater than 0
echo "OK";
}else{
// Rows detected are less than 0
echo "Error";
}
答案 2 :(得分:0)
您应该将SQL查询更改为:
UPDATE mytable
SET myfield = CASE
WHEN myfield = 0 THEN 'AAA'
WHEN myfield > 0 THEN myfield - 1
ELSE myfield = myfield
END
WHERE cliente_id = $cual_ID
此外,您应该重新考虑强制执行错误的方式来执行此操作。我认为有更好的方法(例如,确定是否有任何行已被更改)。