3

我是 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 。

我正在尝试安装“ Login-Redirect v1.31 ”以进行用户身份验证。

如果有人可以帮助我,我将不胜感激!

4

4 回答 4

8

停止

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

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

除此之外,echo $sql在此处执行并粘贴结果,我们将能够准确地向您展示坏处'

于 2012-08-27T14:56:55.887 回答
0

第一步是隔离查询的哪个部分正在引用。

您的错误是引用一列,并插入一个字段。

我看到你正在传递一个'1'. '1'是一个字符串,而1是一个整数。

如果您的 Column Schema 说它是int列类型,则删除单引号并重试。

于 2012-08-27T14:58:31.463 回答
0

对于初学者这样做:

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

  2. 将该语句复制到您最喜欢的 SQL 编辑器中,并通过它来查找错误。

在不知道代码执行时绑定哪些变量的情况下,很难调试动态 SQL 语句。

于 2012-08-27T14:59:08.910 回答
0

非常感谢大家帮助我解决这个问题。

在变量上打印 an$echo给了我答案。问题在于$_POST[redirect_to]that 不起作用,因为它之前没有很好地定义。

我将输入变量更改为空字符串,它起作用了:

$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并解决它,我对此很陌生。

感谢您的更正和提示!

于 2012-08-28T16:18:54.843 回答