我将字段 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:到目前为止的调查结果摘要:
- 本地主机 (MySQL 5.6.24) 工作,服务器 (MySQL 5.5.55-0+deb7u1) 不工作。
- 问题出现在我的代码和服务器上的 PHPMyAdmin 中,但在本地有效,因此我消除了代码问题。
show variables like 'char%'
查询显示本地和服务器上的所有字符集设置相同。- 数据库和字段在服务器和本地具有相同的编码。
- 似乎不像许多评论所暗示的那样是类型转换问题,因为问题不存在于本地主机上,只存在于服务器上,除非服务器有配置或其他问题。
- ...?
最佳答案
id 可能在您的数据库中被定义为整数。要匹配整数字段,您不需要使用引号。匹配字符串或文本字段时使用引号。
关于php - MySQL查询没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43917259/