我正在编写一段代码,允许用户相互发送消息。每当我尝试将消息插入数据库时,我都会收到语法错误,但是,就我而言,我无法弄清楚我的错误是什么。我知道问题不在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
这是我的数据库结构的图像:
我感谢任何帮助!
答案 0 :(得分:5)
TO
和FROM
是保留关键字,必须使用反引号进行转义
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')