更新if(条件)或产生错误

时间:2013-08-24 23:39:41

标签: php mysql sql

我需要通过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大于零时。

有什么想法吗?

3 个答案:

答案 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

此外,您应该重新考虑强制执行错误的方式来执行此操作。我认为有更好的方法(例如,确定是否有任何行已被更改)。