0

我需要通过 php 更新表格。我需要响应将是确定或错误。基本上,如果字段值不为零,我需要将字段值减 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 大于零时也是如此。

有任何想法吗?

4

3 回答 3

2

可能的解决方案不是产生错误,而是在更新语句的WHERE子句中引入附加条件并用于查看行是否已更新myfield > 0mysql_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);

附带说明:不要插入查询字符串,而是考虑使用带有or的准备好的语句mysqli_*PDO

于 2013-08-24T23:56:23.073 回答
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

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

于 2013-08-24T23:55:36.763 回答
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";
}
于 2013-08-24T23:47:04.463 回答