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を間違えました。youre値の正しいケースは次$_POST['totalPages']のとおりです。Pname属性のmajにあります。

あなたのフォームは:

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

名前はよくtotalPagesです...

于 2013-03-26T13:17:45.240 に答える
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 に答える
0

フィールドが整数の場合は(int)、クエリに値を追加する前にintキャストを使用することを検討してください。ただし、他のすべての変数は、クエリに追加する前にエスケープする必要があることに注意してください。変数の1つに、クエリを無効にする文字列が含まれている可能性があるためです。

たとえば$_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 に答える