php - PDO准备bindParam与破折号无法正常工作

时间:2015-01-26 09:32:27

标签: php mysql pdo

我在这样的数据库中有法国城市:

01001   Abergement-Clémenciat
01002   Abergement-de-Varey
01004   Ambérieu-en-Bugey
01005   Ambérieux-en-Dombes
01006   Ambléon
01007   Ambronay
01008   Ambutrix
01009   Andert-et-Condon
01010   Anglefort

我有一个PDO准备查询:

$sth = $this->connection->prepare('
        SELECT code
        FROM insee
        WHERE city = :city
    ');
$sth->bindParam(':city', $city, PDO::PARAM_STR);
$sth->execute();

$row = $sth->fetch();

当城市等于“Ambronay”或“Ambléon”或“Ambutrix”时,fetch会返回一些内容。 但是当城市等于“Abergement-de-Varey”或“Saint-Étienne”或带有破折号( - )的其他东西时,当数据在数据库中时,fetch不返回任何内容。

可能是什么原因?

先谢谢你。

2 个答案:

答案 0 :(得分:0)

这似乎是编码问题。在这一点你应该强制php使用$city的多字节字符串。如果问题仍然存在,请检查您的数据库编码,这应该是针对utf8这样的咒语。如果问题现在仍然存在,请检查驱动程序连接编码。请注意,此设置非常依赖于数据库。 E. g。在MySQL中,您可以为每个表定义不同的字符集,这在其他数据库中是不可能的。

答案 1 :(得分:0)

谢谢@ alpham8。

我忘了在调用PDO时输入编码,现在可以正常工作。

所以解决方案是:

$this->connection = new PDO($dns, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));