我无法将此now() + INTERVAL
INSERT 语句转换为带有命名占位符的 PDO 准备语句。
当我使用'now() + INTERVAL 3 DAY'
or绑定值时'DATE_ADD(now(), INTERVAL 3 DAY)'
,它会插入 000 而不是正确的日期时间(0000-00-00 00:00:00)
这是我以前使用的:
$qry = "INSERT INTO password_reset(user_id, temp_password, expiry_date)
VALUES('$member_user_id','$temp_password', now() + INTERVAL 3 DAY)";
新的 PDO 声明:
$stmt = $conn->prepare('INSERT INTO password_reset (user_id, temp_password, expiry_date)
VALUES(:user_id, :temp_password, :expiry_date)');
$stmt->bindValue(':user_id', $member_user_id);
$stmt->bindValue(':temp_password', $random_password);
$stmt->bindValue(':expiry_date', 'now() + INTERVAL 3 DAY');
$insertResult = $stmt->execute();
我也试过这个:
$stmt->bindValue(':expiry_date', 'DATE_ADD(now(), INTERVAL 3 DAY)');
几个 SO 帖子中提出的替代方法
一些 SO 帖子(包括此链接)建议将 now() 语句放在 VALUES 中而不是绑定它,但这会导致错误消息“无效的参数号:绑定变量的数量与标记的数量不匹配”
$stmt = $conn->prepare('INSERT INTO password_reset (user_id, temp_password, expiry_date)
VALUES(:user_id, :temp_password, :now() + INTERVAL 3 DAY)');
$stmt->bindValue(':user_id', $member_user_id);
$stmt->bindValue(':temp_password', $random_password);
$insertResult = $stmt->execute();