首先,我从一个月前开始使用PHP和数据库,但到目前为止,我找到了解决大多数问题的解决方案。
我正在尝试创建一个管理功能,您可以删除超过“X”天的条目。 但是我很确定我的PDO出现了问题(日期部分)。
PHP:
$backsite = $_SERVER['PHP_SELF'];
if (isset($_POST['days'])) {
$days = $_POST['days'];
$statement = $db->prepare("DELETE FROM $tbl_name WHERE date < DATE_SUB(NOW(), INTERVAL :days DAYS)");
$statement->execute(array(':days' => $days));
}
HTML:
<form method="post" action="' . $backsite .'">
<input type="number" min="7" max="90" placeholder="7" required="" name="days"/>
<input type="submit" name="delete" value="Delete" />
</form>
错误讯息:
致命错误:带有消息的未捕获异常'PDOException' 'SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,用于在“DAYS”附近使用正确的语法 1'在/Applications/XAMPP/xamppfiles/htdocs/skiss/archive.php:10堆栈 跟踪:#0 /Applications/XAMPP/xamppfiles/htdocs/skiss/archive.php(10): PDOStatement-&gt;执行(数组)#1 {main}抛出 第10行/Applications/XAMPP/xamppfiles/htdocs/skiss/archive.php
答案 0 :(得分:2)
DAYS
需要单数。
DATE_SUB(NOW(), INTERVAL :days DAY)
答案 1 :(得分:0)
$backsite = $_SERVER['PHP_SELF'];
if (isset($_POST['days'])) {
$days = $_POST['days'];
$statement = $db->prepare("[DELETE FROM $tbl_name WHERE date < DATE_SUB(NOW(), INTERVAL :days DAY)](dev.mysql.com/doc/en/date-and-time-functions.html)");
$statement->execute(array(':days' => $days));
}
您的SQL语句中有一个额外的“S”。