如何删除prepare语句中的单引号?

时间:2016-07-04 17:05:59

标签: php codeigniter codeigniter-3

我的查询是这样的:

$group_id = $session['group_id'];

$sql = "SELECT *
        FROM notification 
        WHERE group_id IN(?)";

$result = $this->db->query($sql, array($group_id))->result_array();

当我添加:echo $this->db->last_query();die();时,结果如下:

SELECT * FROM notification WHERE group_id IN('1,13,2')

我想删除单引号,以便结果如下:

SELECT * FROM notification WHERE group_id IN(1,13,2)

如何删除prepare语句中的单引号?

5 个答案:

答案 0 :(得分:1)

您要么需要动态添加与数组中的值一样多的?

或者停止使用准备好的查询,然后执行以下操作:

$group_id = $session['group_id'];

$sql = "SELECT *
    FROM notification 
    WHERE group_id IN (".implode($group_id,",").")";

如果数据不是来自用户,则不一定需要使用准备好的查询来确保数据安全。但是如有必要,您可以在查询之前进行is_numeric()检查,以查看数据是否有效。

答案 1 :(得分:0)

我更喜欢你可以使用where_in命令,如下所示: -

$this->db->select('*');
$this->db->where_in('group_id',$group_id);
$this->db->get('notification');

答案 2 :(得分:0)

您所要做的就是创建一组group id。请尝试以下

createDate = '2016-07-12T09:09:38';   //watch for the T in between
createDate = new Date(createDate);
console.log(createDate);

它会起作用

答案 3 :(得分:0)

您可以这样:

$ session [' group_id'] 可能是一个字符串。所以你可以把那个字符串转换成一个数组。

$group_id = explode(",", $session['group_id']);

现在$ group_id已经是一个数组了。因此,在下面的语句中,只用' $ group_id' 替换数组($ group_id)

$result = $this->db->query($sql, array($group_id))->result_array();

所以整个代码就像:

$group_id = explode(",", $session['group_id']);

$sql = "SELECT *
        FROM notification 
        WHERE group_id IN(?)";

$result = $this->db->query($sql, array($group_id))->result_array();

答案 4 :(得分:0)

%s 占位符更改为%1s ,删除prepare语句中的Automattic单引号。

示例:

global $wpdb
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}posts WHERE post_status='wc-completed' AND ID IN(%1s)", '1,2,3' );

Reference links: 谢谢