这是我在CodeIgniter中的活动记录代码:
$this->db->...
$this->db->join('post_likes', 'post_likes.user_id="'.$this->db->escape($online_user).'" AND post_likes.post_id=post.id', 'left');
这就是它的解释方式:
LEFT JOIN `post_likes` ON `post_likes`.`user_id`="`3"` AND post_likes.post_id=post.id
它给出了错误:
`user_id`="`3"`
如何在活动记录中写一个直接号码?
更新
删除escape
要在您的计算机上测试它,您不需要拥有数据库。只是尝试此代码会显示错误:
$this->db->select('*')
->from('mytable')
->join('post_likes', 'post_likes.user_id="3" AND post_likes.post_id=post.id', 'left');
$query=$this->db->get('');
var_dump($this->db->last_query());
exit(0);
结果:
A Database Error Occurred
Error Number: 1064
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 '` AND post_likes.post_id=post.id' at line 3
SELECT * FROM (`mytable`) LEFT JOIN `post_likes` ON `post_likes`.`user_id`="`3"` AND post_likes.post_id=post.id
答案 0 :(得分:3)
你不应该在SQL查询中使用双引号:
$this->db->join('post_likes', "post_likes.user_id = $online_user AND post_likes.post_id=post.id", 'left');
这是当前CI稳定版本中的一个错误(在v3.0-DEV中修复),CI ActiveRecord方法(实际上并未实现ActiveRecord)为简单用法做好准备。
我之前通过黑客核心文件解决了这个问题(通过添加参数来加入方法来禁用_protect_identifires
)。
我们走了:
在system/database/DB_active_rec.php
第310行中,添加$escape
作为第四个参数:
public function join($table, $cond, $type = '', $escape = TRUE)
并将$match[3] = ...
更改为:
if ($escape === TRUE)
{
$match[3] = $this->_protect_identifiers($match[3]);
}
因此,您可以使用join($table, $cond, $type = '', $escape = FALSE)
禁用转义。
此外,将_protect_identifires
全局设置为FALSE
的方向不正确。
唯一的选择仍然是使用自定义query()
:
$sql = "SELECT * FROM some_table WHERE id = ?"
$this->db->query($sql, array(3));
答案 1 :(得分:0)
试试这个
$this->db->join('post_likes', "post_likes.user_id=$the_userid AND
post_likes.post_id=post.id", 'left');
或
$this->db->join('post_likes', 'post_likes.user_id="'.$the_userid.'" AND
post_likes.post_id=post.id', 'left');
更新
定义
$db['default']['_protect_identifiers']= FALSE;
最后在“application / config / database.php”中。
答案 2 :(得分:0)
简单的解决方案是在加入查询之前暂时将protect_identifiers设置为关闭,例如:
$this->db->_protect_identifiers = false;
进行联接查询后,您可以将其设置回true
在CodeIgniter 2.1.2版中为我工作
答案 3 :(得分:-2)
尝试这个
$this->db->join('post_likes', 'post_likes.user_id="{$online_user}" AND post_likes.post_id=post.id', 'left');
如果您遇到任何问题,请告诉我。
答案 4 :(得分:-2)
不要使用$this->db->escape
$this->db->join('post_likes', 'post_likes.user_id="'.$online_user.'" AND post_likes.post_id=post.id', 'left');