私の内部プロジェクトでSELECTクエリ中にutf8文字(šđčćž)に関する問題が発生しました。私はfreetds定義の問題をfreetds.confのcharsetとバージョンに関して修正した後、SELECTクエリを実行するときに正しい文字を受け取るようになりました。PDO + MsSQL + freetds = INSERTクエリの文字が間違っています
しかし!今私はINSERT/UPDATEクエリに関する問題を経験しています。これらの文字の一部を検索するときにSELECTクエリを使用すると、PDOのbindValueメソッドでのみ発生します。たとえば、これは私のコード
されています:
try {
$pdo = new \PDO(
"dblib:host=$host:$port;dbname=$database",
"$username",
"$password"
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "There was a problem connecting. " . $e->getMessage();
}
私は、コードを次のように挿入値をしようとすると、データベース内に挿入された値が正しい:
$query = "INSERT INTO dbo.TABLE (ID, NAME) VALUES (2, 'Beriša');";
$statement = $pdo->prepare($query);
$statement->execute();
//Result:
//2 Beriša
しかし、bindValueメソッドを使用した後(私はSymfony2で作業するように使用する必要があります)、問題が発生します。
$query = "INSERT INTO dbo.TABLE (ID, NAME) VALUES (?, ?);";
$statement = $pdo->prepare($query);
$statement->bindValue(1, 2, \PDO::PARAM_INT);
$statement->bindValue(2, 'Beriša', \PDO::PARAM_STR);
$statement->execute();
//Result:
//2 Beriša
ベロー、私のcurレンタルフリーセットの設定:
[global]
tds version = 8.0
text size = 20971520
client charset = UTF-8
データベースのcharset連合はクロアチア_CI_ASです。残念ながら、私はそれを古いデータベースと同じように変更することはできません。古いアプリケーションで動作するように設計されており、そのアプリケーションではWebプレゼンテーションを行っています。
接続のDSN –
でパスUTF8あなたが考える場合: $ PDO =新しい\ PDO( "DBLIB:ホスト= $ホスト:$ポート; DBNAME = $データベース;のcharset = UTF8"、 」 $ username "、 " $ password " ); 既に疲れていて助けにならない。 –
@MarkoMilojevicあなたの問題を再現できません。それは私にとってはうまくいくかもしれません。おそらく '$ statement-> bindValue(2、utf8_encode( 'Beriša')、\ PDO :: PARAM_STR); – meda