【问题标题】:Mysql select giving the wrong answer inside phpMysql select在php中给出错误的答案
【发布时间】:2016-12-16 11:33:35
【问题描述】:

我在查询 mysql 数据库时遇到了 PHP 脚本的问题。

查询是:

SELECT COUNT(*) FROM theTable WHERE fieldValue = ‘Dom-Rémy'

我已经检查过,在管理控制台 (phpMyAdmin) 中手动执行此查询时,我可以找到一条与请求匹配的记录,这是我所期望的。

但是在代码如下的 PHP 脚本中,我总是得到 0 条记录(而不是 1 条):

$Query = "SELECT COUNT(*) FROM theTable WHERE fieldValue = 'Dom-Rémy'";
$DBR = mysql_query($Query,$Connection);
$NBR = mysql_result($DBR,0,0);
printf("NBR: %d\n",$NBR);

这是为什么呢?我怀疑 fieldValue 中的欧洲字符是导致问题的原因,但我应该怎么做才能使它起作用?

【问题讨论】:

  • 您怀疑 fieldValue 中的欧洲字符会导致问题。这很容易测试。你做到了吗?
  • 在传递给 sql 查询之前使用 mysql_real_escape_string('Dom-Rémy')
  • 是的,但这没有任何区别。
  • 不要在 PHP 中使用mysql_* API;切换到mysqli_*PDO

标签: php mysql character-encoding


【解决方案1】:

在您的查询之前使用类似的东西来设置客户端和结果的字符集:

  mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);

【讨论】:

  • 更简单的是执行SET NAMES ut8
【解决方案2】:

仅使用计数 count(*) 有时会失效

$query = "SELECT COUNT FROM theTable WHERE fieldValue = 'Dom-Rémy'";
 $result = mysql_query($query);

【讨论】:

  • 是count()函数。计数什么都不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多