PHP/MySQL/PDO--无法更新默认值或零值

PHP/MySQL/PDO--无法更新默认值或零值,php,mysql,pdo,Php,Mysql,Pdo,在图书表中,某些行可能没有完整的数据。但是,管理员可以编辑行。在这种情况下,管理员通过添加一个没有发布年份的发布年份(插入的年份为空)来更新行 由于某些原因,此INT(4)列上的MySQL/PDO更新不起作用 字段year_pub不为空 代码如下: $year_pub = filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT); $id_book = filter_var($_POST[‘id’], FILTER_SANITIZE_NUMBE

在图书表中,某些行可能没有完整的数据。但是,管理员可以编辑行。在这种情况下,管理员通过添加一个没有发布年份的发布年份(插入的年份为空)来更新行

由于某些原因,此
INT(4)
列上的MySQL/PDO更新不起作用

字段year_pub不为空

代码如下:

$year_pub = filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT);
$id_book = filter_var($_POST[‘id’], FILTER_SANITIZE_NUMBER_INT);

/*
*   DB CONNECT
*/

$query = "UPDATE table_books SET year_pub=:year_pub WHERE id_book=:id_book";
$stmt = $dbH->prepare($query);
$stmt->bindParam(":year_pub", $year_pub, PDO::PARAM_INT);
$stmt->bindParam(":id_book", $id_book, PDO::PARAM_INT);
$stmt->execute();
以下是一些结果:


[年份发布字段具有默认值]

如果默认值为0 更新不起作用

如果默认值为1 更新不起作用

但是,第二次尝试更新确实有效


[年份发布字段没有默认值](“占位符”值)

如果
占位符
值为0
更新不起作用

如果
占位符
值为1
更新作品



这是非常奇怪的行为。我以前从未见过这种情况。有人能解释一下这里可能发生了什么吗?

示例代码不准确。实际查询是:

$query = "UPDATE table_books SET year=:year WHERE id_book=:id_book";

该专栏被命名为“年”。将列名更改为“year_pub”,就像它应该被命名一样,解决了这个问题。

我注意到的第一件事是,由于不同的引号,您的代码出现了奇怪的颜色,我会先研究一下。好的,我想我现在在代码块中看到了它。Post键“年”以红色突出显示。现在我意识到我的错误了。数据库中的实际字段只是'year',这是一个MySQL关键字。它是从RTF中剪切和粘贴的。这很奇怪。@Dev
year
不是保留的。颜色是因为标准报价的智能报价。
(R)
表示保留条款。@Dev RTF文件(即写字板或MS Word)没有使用正确的双引号字符。在这种情况下,您应该删除该问题,因为该问题是打字错误,而不是编程问题。