选择关键字不能插入到mysql表中

时间:2011-02-26 04:16:54

标签: php mysql

我正在为应用程序使用mysql数据库。我得到一些用户详细信息。用户在答案中使用select关键字后,插入查询会导致mysql出现问题。我在我的所有应用程序中使用了近300个插入查询。选择关键字会产生问题

如何轻松解决?

提前致谢

更新:

$query = "INSERT INTO `feedback_entry_mailactivity_log` (  `subject`, `body_text`, `to_mail_id`, `from_mail_id`, `cc_mail_id`, `created_user_id`, `created_date_time`, `last_updated_user_id`, `last_updated_date_time`, `feedback_entry_id`, `feedback_id`, `account_id`, `section_id`)
                    VALUES ('".$subject."', '".$body_text."','".$to_mail_id."','".$from_mail_id."','".$cc_mail_id."','".$assign_to_userid."', NOW(),'".$assign_to_userid."', NOW(),'".$feedback_entry_id."','".$feedback_id."','".$this->account_id."','".$temp_sectionid."' );";
        $this->db->execute($query);

在这种情况下,如果$subject="select a tag";

因此,当我使用关键字时,选择插入查询不起作用

1 个答案:

答案 0 :(得分:1)

问题是使用字符串生成的SQL语句 - 这可能导致错误的转义和注入攻击(或错误行为),从而导致上述错误。想象一下,如果其中一个输入变量 - 其中包含'SELECT'的变量 - 包含SQL字符串转义字符,例如Wish this would' SELECT FAIL。 (在这种情况下,这可能不是确切的问题,真正的问题可能在于其他一些层试图“保护”坏访问方法的使用。)

要正确解决此问题 ,请使用PDO(或类似)和prepared-statements。 (Jeremiah Willcock建议mysqli_prepare)。

  
    

不需要引用准备语句的参数;驱动程序自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确保不会发生SQL注入(但是,如果查询的其他部分是使用非转义输入构建的,则仍然可以进行SQL注入)。

  

注意:不正确的“解决方案”包括mysql_real_escape_string等。对于静态DQL而言,当使用“使用SQL字符串构建的手动转义”方法时,应该使用的内容很少 - 也许没有。

快乐的编码。