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 语法有错误