我的查询是这样的:
$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语句中的单引号?
答案 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' );