PHP 和 SQL:语法错误

Posted

技术标签:

【中文标题】PHP 和 SQL:语法错误【英文标题】:PHP and SQL: Syntax Error 【发布时间】:2013-12-01 22:37:00 【问题描述】:

我是 php 和数据库的新手,在运行以下代码时,我不断收到错误“错误:您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册以获取正确的语法在第 1 行的“表 (input1) VALUES ('test2')' 附近。”该程序旨在从表单中获取字符串并将其存储在数据库中。

这是 html 文件:

<html>
<head>
<title>Php Website</title>
</head>

<body>
<form action="index.php" method="POST">
    <p> Input 1: <input type="text" name="input1"> </p>
    <input type="submit" value="Submit">
</form>
</body>
</html>

这是 PHP 文件:

define('db_name', 'DataTest');
define('db_user', 'root');
define('db_password', '');
define('db_host', 'localhost');

$link = mysql_connect(db_host, db_user, db_password);

if (!$link)

die('Could not connect: ' . mysql_error());


$db_selected = mysql_select_db(db_name, $link);

if (!$db_selected)

die('Cannot use ' . db_name . ': ' . mysql_error());


$value = $_POST['input1'];

$sql = "INSERT INTO Table (`input1`) VALUES ('$value')";

if (!mysql_query($sql))

die('Error: ' . mysql_error());


mysql_close();

?>

<html>
<head>
  <title>Php Website</title>
</head>

<body>
</body>
</html>

【问题讨论】:

使用mysqli或PDO看***.com/a/60496/2864740 【参考方案1】:

Table 是一个reserved word。或者不要将其用作标识符(即重命名您的表),或者在反引号中引用它:

INSERT INTO `Table` (`input1`) VALUES ('$value')

警告

    您的代码容易受到 SQL 注入的攻击。您真的应该使用prepared statements,将变量作为参数传递给其中,这些参数不会针对 SQL 进行评估。如果您不知道我在说什么,或者不知道如何解决,请阅读 Bobby Tables 的故事。

    另外,如the introduction 中关于mysql_* 函数的PHP 手册一章所述:

    此扩展自 PHP 5.5.0 起已弃用,不推荐用于编写新代码,因为它将在未来被删除。相反,应该使用mysqli 或PDO_MySQL 扩展名。在选择 MySQL API 时,另请参阅 MySQL API Overview 以获得更多帮助。

【讨论】:

【参考方案2】:

您的插入语法不正确:

INSERT INTO Table (`input1`) VALUES ('$value')
             ^ replace table with the table name

插入的语法是:

INSERT INTO tableName (`input1`) VALUES ('$value')

如果您的表被称为表,首先我建议您尽快更改该名称。但是如果你必须使用它,你必须使用`table`,并在其周围加上`

【讨论】:

以上是关于PHP 和 SQL:语法错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

SQL PHP 语法错误优化

PHP:您的 SQL 语法有错误,请查看手册

php中for和SQL更新的正确语法是啥?

INSERT INTO 语句的语法错误

第 1 行的 ''')' 附近的 SQL 语法有错误