Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询转义+codeigniter_Php_Mysql_Sql_Codeigniter_Codeigniter 2 - Fatal编程技术网

Php SQL查询转义+codeigniter

Php SQL查询转义+codeigniter,php,mysql,sql,codeigniter,codeigniter-2,Php,Mysql,Sql,Codeigniter,Codeigniter 2,我使用的是codeigniter,大多数情况下我的查询都使用活动记录,这会自动转义它们,但是由于变量的原因,这个查询似乎不适合它。因此,我需要找出如何手动转义查询 Codeigniter文档建议通过以下方式逃避查询: $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")"; 我最初的疑问 我的转义查询 但是我在语法上遇到了问题。错误消息包括: PHP错误消息:未定义变量:用户语言 SQL错误:

我使用的是codeigniter,大多数情况下我的查询都使用活动记录,这会自动转义它们,但是由于变量的原因,这个查询似乎不适合它。因此,我需要找出如何手动转义查询

Codeigniter文档建议通过以下方式逃避查询:

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
我最初的疑问

我的转义查询

但是我在语法上遇到了问题。错误消息包括:

PHP错误消息:未定义变量:用户语言 SQL错误:语法错误…在第1行的“valuesnall”附近 如果要选择由$id指定的用户语言,则应采用这种方式

处理数字的另一种选择是:

$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
codeigniter还支持将准备好的语句作为查询绑定:

使用绑定的第二个好处是 自动转义,生成更安全的查询。你不必这么做 记住手动转义数据;这台发动机自动运转一周 你


我不明白为什么您说不能将Active Record类与CI一起使用,下面是一个简单的SQL调用示例:

然后正确转义$id,并减轻任何注入。
就我个人而言,只要有可能,我就使用AR,它允许我编写快速高效的代码,并且不必担心SQL调用自定义查询会带来什么问题。

是否要在查询中插入或选择某些内容?选择。插入的内容来自Codeigniter文档。更新了我的答案,希望它对您有效:]代码请向我们提供Codeigniter文档的链接。我在那里找到了,但看不到你的代码。@JerminBazazian这是链接,在“转义查询”第二到最后一节下面。谢谢;它起作用了!我接受了你的答案并投了赞成票。旁白:我有没有办法确认该查询是否已转义?我还有一些其他的查询需要转义,我想在转义后检查它们。好吧,我使用的是预先准备好的语句,多年来都没有转义。我不知道codeigniter是否支持他们:好的,谢谢。我认为Codeigniter使用了一种叫做活动记录的东西,可以自动逃避查询。但是有些查询不适合它的语法,所以这就是我需要帮助的原因。再次感谢。codeigniter似乎调用准备好的语句查询绑定。在他们的文档中。好的,谢谢。你看我缺乏知识。我也没有使用绑定,主要是因为变量。再次感谢你的帮助。好的,这是投票结果。这并不是说我不能,但我没有听说过方法链接。我不知道如何在where子句中指示变量。非常感谢。@Chowy,这一切都在里面,非常彻底,有很好的例子,我以此作为参考。再次感谢。
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")";
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
$this->db->select('*')->from('user_language')->where('user_id', $id);
$query = $this->db->get();