が私のコードです:insert .. selectが実際に行を挿入したかどうかはどのように知ることができますか?ここで
$stm = $dbh
->prepare("INSERT INTO resend_pass(user_id, token, date_time)
SELECT ?, ?, unix_timestamp()
FROM dual
WHERE NOT EXISTS(SELECT count(*) AS num_week,
COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))),0) as num_day,
COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 hour))),0) as num_hour,
COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 minute))),0) as num_1min
FROM resend_pass
WHERE user_id = ?
AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK))
HAVING num_week > 11 OR num_day > 5 OR num_hour > 3 OR num_1min > 0);");
if($stm->execute(array(10, 'token', 10))){
echo 'inserted';
} else {
echo 'failed';
}
私のスクリプトは常に何行が挿入されていない場合でも、inserted
を印刷します。どうして?それをどうやって修正することができますか?
私はthis approachを使用して正常に挿入されたかどうかを知りました。
グレート+1 ..あなたのコードを書き換えて、 'if'ステートメントの代わりに' try/catch'を使ってください。このようにif($ stm-> rowCount()> 0)throw; '。また、*「行が見つかりません」*と「失敗」*は私にとっては同じです。 –
PDOが例外をスローすることができるのかどうか分かりませんか? –
また、 '$ stm-> execute(array(10、 'token'、10))'を 'if'文から書くことができると思います。 –