0

PHP経由でテーブルを更新する必要があります。応答が OK またはエラーになる必要があります。基本的に、フィールド値がゼロでない場合は、フィールド値から 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 を実行すると、myfield が 0 より大きい場合でも、常に OK が返されます。

何か案は?

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);

補足:クエリ文字列を補間する代わりに、またはのいずれかで準備済みステートメントを使用することを検討してください。mysqli_*PDO

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