这是我的代码:
<?php
$con = mysql_connect("localhost","solidarity","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $con);
$sql="INSERT INTO show_reviews (username, date, content, show) VALUES (".addslashes($_POST[username]).",".addslashes($_POST[date]).",".addslashes($_POST[content]).",".addslashes($_POST[show]).")";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
Run Code Online (Sandbox Code Playgroud)
所以我使用了fsprint,现在我刚刚使用了w3schools代码,这是我输出的两段代码:
错误:SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行使用"show"(Solidarity,17:02 - Wed,2012年8月1日,Testing,kr1971)附近使用正确的语法
我对评论系统使用了非常相似的语法,没有这个问题.如果它也有帮助,我已经尝试了本地的SQL服务器和遥控器,仍然没有运气.
请帮我 :(.
将值放在单引号内:
$sql=" INSERT INTO show_reviews (username, date, content, show)
VALUES ('".addslashes($_POST[username])."','".addslashes($_POST[date])."','".addslashes($_POST[content])."','".addslashes($_POST[show])."')";
Run Code Online (Sandbox Code Playgroud)
此外,正如其他人所说,show是MySQL中的保留关键字.您可以在http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html上查看MySQL 5.5保留关键字的完整列表.
您可以使用反引号引用保留字以便能够使用它们:
INSERT INTO show_reviews (username, date, content, `show`)
Run Code Online (Sandbox Code Playgroud)
引用标识符: http ://dev.mysql.com/doc/refman/5.5/en/identifiers.html
最后,总结一下关于使用addslashes()转义的评论.我会让Chris Shiflett解释为什么它不好:http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string
你真的应该在准备好的语句/参数化查询上与PDO或至少MySQLi一起跳跃.以下是您查询的外观示例:
$dbh = new PDO($connection_string);
$sql = "INSERT INTO show_reviews (username, date, content, show) VALUES (?, ?, ?, ?)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array($_POST['username'],
$_POST['date'],
$_POST['content'],
$_POST['show']
));
while ($row = $stmt->fetch()) {
print_r($row);
}
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,对$ _POST变量进行清理仍然是一个好主意,并尽力确保您收到的数据正是您想要获得的数据.这些准备好的语句可以正确地为您提供转义,如果使用PDO,则可以使用适合您特定数据库引擎的方法.