0

我正在尝试将数据从简单表单发送到 PostgreSQL 数据库,但我的服务器日志显示错误Query failed: ERROR: invalid input syntax for integer有问题的代码部分是:

形式:

<form action="insert.php" method="post">
[removed]
Total Pages: <input type="number" name="totalPages" id="totalpages"><br><br>
<input type="submit"> </form>

错误消息中指示的 insert.php 中的行:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg)
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."','".$_POST['totalpages']."')");

在网上环顾四周,我找到了提到不正确使用'"符号的解决方案,但这只会导致其他语法错误。

编辑:没有提到totalpg在我的数据库中是一个 smallint

解决方案:感谢 JoDev 的帮助,更改'".$_POST['totalpages']."'".intval($_POST['totalPages']).",现在可以完美运行。

4

3 回答 3

1

也许可以确定 POST 值,并删除引号:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg)
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."',".intval($_POST['totalPages']).")");

[编辑]
你在 HTML 表单和 PHP 之间犯了一个错误。您的值的正确大小写是:P是属性$_POST['totalPages']的maj。name

您的表格是:

Total Pages: <input type="number" name="totalPages" id="totalpages">

这个名字很好totalPages ...

于 2013-03-26T13:17:45.240 回答
0

如果您的字段是整数,请考虑(int)在将值附加到查询之前使用 int 强制转换。但是请注意,在将所有其他变量附加到查询之前,必须对其进行转义,因为其中一个变量可能包含使查询无效的字符串。

例如,如果$_POST['title']将包含值:Why Hackers Don't Want You To Escape Strings,则查询将变为:

INSERT INTO books(coverurl, title, author, genre, totalpg)
VALUES('http://example.com/','Why Hackers Don't Want You To Escape Strings','J. Doe','Educational','400');

...这是无效的 SQL。

于 2013-03-26T13:17:44.690 回答
0

看起来您正在尝试在数字字段中添加文本。

你有没有试过这个:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg)
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."',".$_POST['totalpages'].")");
于 2013-03-26T13:16:05.603 回答