如何调试SQL语法中的错误


How to debug an error in SQL syntax?

我是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. 我觉得这没什么问题。

  2. 我不知道如何调试,我应该如何继续查找错误?有线索吗?

我不确定我是否在正确的位置查看脚本,但这是我有"1"的唯一条目,错误消息告诉我查看…

查看手册后,SQL中的语法似乎是正确的。。。我在WAMP服务器中使用MySQL 5.5.24

我正在尝试安装"登录重定向v1.31"以进行用户身份验证。

如果有人能帮我,我真的很感激!

停止

在进一步使用此代码之前,请阅读有关SQL注入攻击的信息,并修复您的代码

语法错误几乎可以肯定是由注入错误引起的,毫无疑问是由插入查询的数据中的某个额外'引起的。您将原始用户提供的数据传递到查询中,允许恶意用户接管您的服务器、破坏您的数据库、踢您的狗等。

除此之外,做一个echo $sql并将结果粘贴在这里,我们将能够准确地向您显示坏的'在哪里。

第一步是隔离查询引用的部分。

您的错误是引用列和插入字段。

我看到你正在通过'1'考试。'1'是字符串,而1是整数。

如果Column Schema表示它是int列类型,则删除单引号,然后重试。

对于初学者,请执行以下操作:

  1. 使用echo语句将$sql打印到屏幕(或将其记录到文件)。

  2. 将该语句复制到您最喜欢的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的漏洞并解决它,我对此非常陌生。

感谢您的更正和提示!