我是SQL / PHP的新手,我无法克服错误消息:
"You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near '1',"
我正在尝试调试此错误,但我在脚本中查找“1”并且我只有这一点:
//enter information into table
$sql = "INSERT INTO $_SESSION[table_name] VALUES
('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]',
password('$_POST[password]'), 'Administrators', '', '', '0', '$_SESSION[admin_email]',
'$_POST[redirect_to]', '1', '$date')";
$result = @mysql_query($sql,$connection) or die(mysql_error());
if($result)
{...
我发现没有任何问题。
我不知道如何调试这个,我该如何继续查找错误?任何线索?
我不确定我是否在正确的位置查看脚本,但这是我有'1'的唯一条目,错误消息告诉我看看......
检查手册后,SQL中的语法似乎是正确的...我在WAMP服务器中使用 MySQL 5.5.24 。
我正在尝试安装“ Login-Redirect v1.31 ”进行用户身份验证。
如果有人能帮助我,我真的很感激!
答案 0 :(得分:8)
<强> STOP 强>
在您使用此代码之前,请阅读SQL injection attacks和修复您的代码
您的语法错误几乎肯定是由注入错误引起的,毫无疑问是在您插入查询的数据中的某个地方的额外'
。您将原始用户提供的数据传递到查询中,允许恶意用户接管您的服务器,销毁您的数据库,踢你的狗等...
除此之外,请执行echo $sql
并将结果粘贴到此处,我们将能够准确显示错误'
的位置。
答案 1 :(得分:0)
第一步是隔离查询的哪个部分引用。
您的错误是引用列,并插入字段。
我看到你正在通过'1'
。 '1'
是一个字符串,而1
是一个整数。
如果Column Schema说它是int
列类型,则删除单引号并重试。
答案 2 :(得分:0)
初学者这样做:
使用echo
语句将$ sql打印到屏幕(或将其记录到文件中)。
将语句复制到您喜欢的SQL编辑器并完成它,尝试查找错误。
在不知道代码执行时绑定到哪些变量的情况下,很难调试动态SQL语句。
答案 3 :(得分:0)
非常感谢你帮我解决这个问题。
在变量上打印$echo
给了我答案。问题在于$_POST[redirect_to]
无效,因为之前没有明确定义。
我将输入变量更改为空字符串并且工作正常:
$sql = "INSERT INTO $_SESSION[table_name] VALUES
('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]',
password('$_POST[password]'), 'Administrators', '', '', '0',
'$_SESSION[admin_email]', ' ', '1', '$date')";
$result = @mysql_query($sql,$connection) or die(mysql_error());
if($result){
// ...
}
我会研究SQL injections
的漏洞并将其解决,我对此非常陌生。
感谢您的更正和提示!