MySQL查询不返回任何结果

时间:2017-05-11 13:44:46

标签: php mysql codeigniter

我将字段iddate定义为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:到目前为止的调查结果摘要:

  1. Localhost(MySQL 5.6.24)有效,服务器(MySQL 5.5.55-0 + deb7u1)没有。
  2. 问题出现在我的代码和服务器上的PHPMyAdmin中,但在本地工作,所以我消除了代码问题。
  3. show variables like 'char%'查询显示本地和服务器上的所有字符集设置相同。
  4. 数据库和字段在服务器和本地都具有相同的编码。
  5. 似乎没有像许多评论所暗示的那样,因为问题在localhost上不存在,只在服务器上存在,除非服务器有配置或其他问题。
  6. ...?

4 个答案:

答案 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字段是一个整数,必须写成没有引号。

日期相同。内部日期存储为整数,但只要它们具有适当的格式

,就能将字符串转换为日期