这里是我的代码:我如何知道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'语句,'对吗? –