php - php-PDOがbindParamを準備し、ダッシュが機能しない

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


cityが「Ambronay」、「Ambléon」、または「Ambutrix」と等しい場合、フェッチは何かを返します。
しかし、都市が「Abergement-de-Varey」、「Saint-Étienne」、またはダッシュ(-)が付いた何かと等しい場合、データがデータベースにある間、fetchは何も返しません。

その理由は何でしょうか?

事前にお願いします。
答え
これはエンコーディングの問題のようです。この時点で、$cityにマルチバイト文字列を使用するようにphpを強制する必要があります。それでも問題が解決しない場合は、データベースのエンコーディングを確認してください。これは、utf8のような文字列を対象としています。それでも問題が解決しない場合は、ドライバーの接続エンコーディングを確認してください。この設定はデータベースに大きく依存することに注意してください。例: MySQLでは、テーブルごとに異なる文字セットを定義できますが、他のデータベースでは不可能です。
関連記事

php - ExtJでパラメーターAjaxを送信できない

php - eval()を使用して致命的なエラーをキャッチする方法はありますか?

php - codeigniterでのGoogle APIクライアントライブラリの読み込み

php - CPanel jailshellを使用しながらPHPでLinux crontabを作成する

php - 提供された緯度、経度の最も近いドライバーを見つける手順

php - フォーム名に応じて異なるユーザーに投稿するPHP

php - wp_head / wp_footerにページIDを渡す

php - Ignited Datatables CodeIgniterで検索

php - PHP正規表現-複数のスペースを無視

php - Ajaxでカートを更新する-Codeigniter