質問: $conn->prepare($sqlStr); // ※バインド $stmt->bindValue(':test', '%test%', PDO::PARAM_STR); if ($stmt->execute()) { echo $stmt->rowCount(); } ``` 【test_table】の登録情報 id | note 1 | test1 2 | test2 3 | テスト1 4 | テスト2 上記の状態で実行した場合、echoの結果は「2」と表示されます。 「※バインド」の箇所を $stmt->bindValue(':test', '%テスト%', PDO::PARAM_STR); と記載した場合、「0」が表示されます。 想定では「2」が表示されるはずなのですが、どのような理由で想定結果と異なるのでしょうか。 補足: phpmyadminでは「test_table」は「utf_general_ci」が設定されています。 上記のコードを記載したファイルは「utf-8」で保存しています。
回答: 英字を多バイト文字に変えただけであれば文法的な問題ではないので 渡すさいのキャラクターコードの問題だと思います mysqlのバージョンにもよりますが$dsnの時点で、charsetを指定するか ``` $dsn = 'mysql:host=localhost; dbname=mydb;charset=utf8;'; ``` INIT_COMMANDを指定するか ``` $pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); ``` set names を発行するか ``` $pdo->query("set names utf8"); ``` いずれかもしくは全てを組み合わせて試してみて下さい