-1

我有 html 表单

    <form name="booksInput" action="theGamer.php" method="post">
    Book Name: <input type="text" name="books">
    <input type="submit" value="Submit" name="subBooks">
</form> 

用于抓取然后插入值的 php 代码如下

$con=mysql_connect("localhost","root","","library");
$book=$_POST['books'];
$sql="INSERT INTO books (bID, book) VALUES ('','$_POST['books']')";
if (!mysql_query($con,$sql))
{
 die('Error: ' . mysql_error($con));
 }
echo "1 record added";

这是mysql表

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| bID   | int(11)     | NO   | PRI | NULL    | auto_increment |
| book  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

但它给了我错误解析错误,期待T_STRING' or第 8 行 C:\wamp\www\library\theGamer.php 中的 T_VARIABLE' 或 `T_NUM_STRING'

4

7 回答 7

1

使用{}围绕值

$sql="INSERT INTO books (bID, book) VALUES ('','{$_POST['books']}')";

您的代码容易受到 sql 注入的影响,请使用MysqliORPDO与准备好的语句。

编辑

mysql_query()需要第一个参数作为 sql 查询

mysql_query($con,$sql)

应该

mysql_query($sql,$con)

编辑2

您还没有选择数据库。为此使用mysql_select_db

于 2013-07-23T11:03:54.517 回答
1

$sql 变量应该是:

$sql="INSERT INTO books (bID, book) VALUES ('','$_POST[books]')";

只需从 $_POST['books'] 中删除 '

于 2013-07-23T11:04:46.900 回答
0

试试这个查询:

$sql="INSERT INTO books (bID, book) VALUES (NULL,'{$_POST['books']}')";
于 2013-07-23T11:03:54.267 回答
0

您在 POST 中有额外的引号。

个人不喜欢将数组直接放在字符串中而不是将它们连接起来,所以试试这个:-

$con=mysql_connect("localhost","root","","library");
$book=$_POST['books'];
$sql="INSERT INTO books (bID, book) VALUES ('','".$_POST['books']."')";
if (!mysql_query($sql, $con))
{
 die('Error: ' . mysql_error($con));
 }
echo "1 record added";

请注意,您也会让自己对 SQL 注入攻击敞开心扉。为了避免这种情况,只需最少的工作:-

$con=mysql_connect("localhost","root","","library");
$book=mysql_real_escape_string($_POST['books']);
$sql="INSERT INTO books (bID, book) VALUES ('','$book')";
if (!mysql_query($sql, $con))
{
 die('Error: ' . mysql_error($con));
 }
echo "1 record added";
于 2013-07-23T11:04:34.867 回答
0

在查询中使用$books代替:

$books = $_POST['books'];
$sql   = "INSERT INTO books (bID, book) VALUES ('','$books')";
于 2013-07-23T11:06:07.590 回答
0

语句被引号弄乱了。如果您在引号内使用超级全局变量或数组,则最好使用大括号。正确的陈述应该是这样的。

$sql="INSERT INTO books (bID, book) VALUES ('','{$_POST['books']}')";
于 2013-07-23T11:06:15.640 回答
0

如果可以,请使用参数PDO

多年后你会对自己说“谢谢”。

http://php.net/manual/ru/book.pdo.phphttp://www.php.net/manual/ru/pdo.prepare.php

但现在你需要这样做:

$sql="INSERT INTO books (bID, book) VALUES ('','".mysql_real_escape_string($_POST['books'])."')";

正如@Kickstart 所说

于 2013-07-23T11:12:14.063 回答