2009-05-28 11 views
44

PHPを使用して、レコードを削除しようとしていますが、成功したかどうかをチェックしたいと思います。何かが成功したから返されたDELETE FROM foo where bar = 'stuff'ですか?MySQL DELETEが成功したものは何ですか? DELETEが成功したかどうかを確認するには?

また、DELETEが成功したかどうかを確認する他の方法も知っていますか?または、削除する前に行が存在することを確認するだけの方がよいでしょうか?可能であれば、別のクエリを避けようとしています。あなたがmysql_queryを使用していると仮定すると、

答えて

53

:など、DROP、をDELETE、

をSQL文、INSERT、UPDATEの他のタイプのためにするmysql_query()はエラー時に成功またはFALSEにTRUEを返します。

あなたはPDO::execを使用している場合は、マニュアルでは、これは言う:

PDO :: exec()は、発行したSQL文によって変更または削除された行数を返します。行も作用しなかった場合、PDO :: exec()は0を返します。

はスナイプにお答えしたくないが、これは答えとして選ばれたので、私はそれのmysql_queryもクエリがあればTRUEを返します注意してください実際に何も取り除いていませんでした。これを確認するにはmysql_affected_rowsを使用する必要があります。あなたが影響を受けた行数を気にしている場合

+4

を「スナイプにお答えしたくない」ああ、いや!私の貴重で貴重なポイントではありません! =) – biggusjimmus

+0

+1 for mysql_affected_rows –

+1

PDO :: execute()を使用して影響を受けた行の数を取得する場合は、PDO :: rowCount()を使用する必要があります – Alan

32

さらに、:

[用途] mysql_affected_rows()は、DELETE、INSERTの影響を受けた行数を知るREPLACE、またはUPDATE文にします。

+2

私を打つ!これが> 0であることを確認すると便利です。クエリが正しく形成されていて何も削除しなかった場合、mysql_query()はTRUEを返します。 – ceejayoz

+0

@ceejayoz削除するものがなかったため、または何らかのエラーが原因で何も削除されなかったことを明確にしてください。 – MaxZoom

+0

@MaxZoomエラーがある場合、mysql_queryは 'FALSE'を返します。削除するものがない場合、 'mysql_query'は' TRUE'を返し、 'mysql_affected_rows'は' 0'を返します。つまり、mysql_queryを使用しないでください**。 – ceejayoz

13

あなたのクエリを実行した後に置かれ、PHPコードのためにこれを試みることができる:

if (mysql_affected_rows() > 0) { 
    echo "You have successfully updated your data.<br><br>"; 
} 
else { 
    echo "The data you submitted matched the current data so nothing was changed.<br><br>"; 
} 
関連する問題