Вот мой код:Как я могу узнать, если вставить .. 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' statement? Подобно этому 'if ($ stm-> rowCount()> 0) throw;'. Также * «Нет строк найдено» * и * «не удалось» * для меня идентичны. –
Разве вы не знаете, что PDO может самостоятельно генерировать исключения? –
Также я думаю, что могу написать '$ stm-> execute (array (10, 'токен, 10))' из этого 'if' оператора, правильно? –