尝试插入时SQL语法出错

时间:2013-01-22 15:44:50

标签: php mysql sql

我正在编写一段代码,允许用户相互发送消息。每当我尝试将消息插入数据库时​​,我都会收到语法错误,但是,就我而言,我无法弄清楚我的错误是什么。我知道问题不在connect.php范围内。另外,我为$from$to$message获取了适当的值,因此这不是问题所在。这是我的代码:

session_start();

require_once('../setup/connect.php');

$from = $_SESSION['id'];
$to = $_REQUEST['id'];

$message = trim($_POST['msg_body']);    
$insert = "INSERT INTO messages(to, from, msg) VALUES('$to', '$from', '$message')";

mysql_query($insert) or die(mysql_error());

header("Location: view_profile.php?id=$to");

以下报告mysql_error()生成:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   使用靠近'to,from,msg)VALUES('7','6','嘿你好吗?')'在线   1

这是我的数据库结构的图像:enter image description here

我感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

TOFROM是保留关键字,必须使用反引号进行转义

INSERT INTO messages(`to`, `from`, msg) 
VALUES('$to', '$from', '$message')

如果您有时间或特权要更改,请不要使用保留关键字列表中的此类名称。它将给你未来的头痛。

作为旁注,如果值( s )来自外部,则查询容易被SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:1)

FROM是保留字。您不应将其用作列名。如果你坚持使用它,你必须引用它:

INSERT INTO messages("to", "from", msg) 
VALUES('$to', '$from', '$message')

或者如果您没有在ANSI模式下运行MySQL安装,则必须使用可怕的非标准反引号:

INSERT INTO messages(`to`, `from`, msg) 
VALUES('$to', '$from', '$message')