我将字段id
和date
定义为VARCHAR(16)
当我执行此查询时:
SELECT *
FROM `members`
WHERE `id` = '4412040999876'
AND `date` = '201706054783'
我没有结果。
当我这样做的时候:
SELECT *
FROM `members`
WHERE `id` = 4412040999876
AND `date` = 201706054783
注意 - 没有引号 - 我得到了我期待的结果。
编辑:以下是使用的代码 - 我不是手动添加引号。 CI的DB类正在添加它们。
public function get_member_match($id, $mem, $field = 'name')
{
$sql = "
SELECT *
FROM `members`
WHERE `id` = ?
AND `" . $field . "` = ?
";
$sql_array = array($id, $mem);
$q = $this->db->query($sql, $sql_array);
return $q->result_array();
}
我把这个函数称为:
$this->members_model->get_member_match($id, $date, 'date');
我输出查询,并且变量匹配正确,没有错误,只有引号。
知道为什么吗?我之前从未遇到过这个问题。使用查询生成器处理CodeIgniter 3.
EDIT2:到目前为止的调查结果摘要:
show variables like 'char%'
查询显示本地和服务器上的所有字符集设置相同。答案 0 :(得分:1)
id可能在数据库中定义为整数。要匹配整数字段,您不需要使用引号。当您对字符串或文本字段进行匹配时,将使用引号。
答案 1 :(得分:1)
这应该从codeigniter的自动播放中重新投射:
SELECT *
FROM `members`
WHERE `id` = '4412040999876'
AND `date` = '201706054783'
SELECT *
FROM `members`
WHERE CAST(`id` as INTEGER) = '4412040999876'
AND `date` = '201706054783'
答案 2 :(得分:1)
尝试使用此
$this->db->from('members');
$this->db->where('id',$id);
$this->db->where($field,$mem);
$q = $this->db->get();
return $q->result_array();
答案 3 :(得分:-1)
这是因为引号意味着它是一个字符串,而id字段是一个整数,必须写成没有引号。
日期相同。内部日期存储为整数,但只要它们具有适当的格式
,就能将字符串转换为日期