【问题标题】:php - PDO prepare bindParam with dash not workingphp - PDO 准备 bindParam 与破折号不工作
【发布时间】:2015-01-26 09:32:27
【问题描述】:

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

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();

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

可能是什么原因?

感谢您的提前。

【问题讨论】:

  • 尝试转义破折号:$city = preg_replace("/\-/", '\-', $city);
  • 谢谢,但结果是一样的。提取没有返回任何内容。

标签: php mysql pdo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    谢谢@alpham8。

    调用PDO的时候忘记放编码了,现在可以了。

    所以解决办法是:

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

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2021-08-15
      • 2023-03-11
      • 1970-01-01
      • 2013-02-15
      相关资源
      最近更新 更多