1

我正在编写一段代码,允许用户相互发送消息。每当我尝试将消息插入数据库时​​,都会出现语法错误,但我终其一生都无法弄清楚我的错误是什么。我知道问题不在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 服务器版本相对应的手册,以在第 1 行的 'to, from, msg) VALUES('7', '6', 'Hey how are you?')' 附近使用正确的语法

这是我的数据库结构的图像:在此处输入图像描述

我很感激任何帮助!

4

2 回答 2

5

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

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

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

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

于 2013-01-22T15:45:30.740 回答
1

FROM is a reserved word. You shouldn't use it as a column name. If you insist on using it you have to quote it:

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

or if you are not running your MySQL installation in ANSI mode you will have to use the dreaded non-standard backticks:

INSERT INTO messages(`to`, `from`, msg) 
VALUES('$to', '$from', '$message')
于 2013-01-22T15:47:20.027 回答