我是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。
我正在尝试安装"登录重定向v1.31"以进行用户身份验证。
如果有人能帮我,我真的很感激!
停止
在进一步使用此代码之前,请阅读有关SQL注入攻击的信息,并修复您的代码
语法错误几乎可以肯定是由注入错误引起的,毫无疑问是由插入查询的数据中的某个额外'
引起的。您将原始用户提供的数据传递到查询中,允许恶意用户接管您的服务器、破坏您的数据库、踢您的狗等。
除此之外,做一个echo $sql
并将结果粘贴在这里,我们将能够准确地向您显示坏的'
在哪里。
第一步是隔离查询引用的部分。
您的错误是引用列和插入字段。
我看到你正在通过'1'
考试。'1'
是字符串,而1
是整数。
如果Column Schema表示它是int
列类型,则删除单引号,然后重试。
对于初学者,请执行以下操作:
-
使用
echo
语句将$sql打印到屏幕(或将其记录到文件)。 -
将该语句复制到您最喜欢的SQL编辑器中,然后进行操作,尝试查找错误。
在不知道代码执行时绑定到什么变量的情况下,很难调试动态SQL语句。
非常感谢大家帮助我解决这个问题。
在变量上打印$echo
给了我答案。问题在于CCD_ 10不工作,因为它以前没有被很好地定义。
我将输入变量更改为一个空字符串,它起作用了:
$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
的漏洞并解决它,我对此非常陌生。
感谢您的更正和提示!