這裏是我的代碼:我如何知道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 ..只是你可以請你重寫你的代碼,並使用'try/catch'而不是'if'語句?像這樣'if($ stm-> rowCount()> 0)throw;'。另外*「找不到行」*和*「失敗」*對我來說是完全相同的。 –
難道你不知道PDO可以自行拋出異常嗎? –
另外我想我可以寫'$ stm-> execute(array(10,'token',10))''if'語句,'對嗎? –