1

Adams’ Inn America’s Best Inndb テーブルに格納されていると仮定 しますestablishment

Adams’ Inn America’s Best Inn変数をチェックインする必要 があります$EstablishmentName

$stmt = $sql->prepare("SELECT ID FROM `establishment` WHERE Name=? LIMIT 1");
$stmt->bind_param("s",$EstablishmentName);
$stmt->execute();
$stmt->store_result();
print $stmt->num_rows;

問題は、それらが見つからないことです。

出力 0

else で囲まれ$EstablishmentNameていることに注意mb_convert_string($EstablishmentName,'HTML-ENTITIES')してください。エラーが発生しますIllegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

更新:set_charset('utf8')クライアント側に使用します。テーブルの文字セットは utf8 で、照合はutf8_general_ci. テキストは、元のテキストと同じようにエンコードされます。次の DB マネージャーを使用しています: SQLyog と PHPMyAdmin。

更新 #2:スクリーンショットを添付して、正しい文字セットを伝えていることを確認してください。

スクリーンショット_1

私が使う$sql->set_charset('utf-8');

配列
(
    [BrandName] => アメリカズ ベスト バリュー イン
    [試行1] => 1
)

配列
(
    [ブランド名] => アダムズ イン
    [試行 1] => 0
)

配列
(
    [ブランド名] => アンバサダー イン アンド スイーツ
    [試行1] => 1
)

配列
(
    [ブランド名] => アンバーリー スイート ホテル
    [試行1] => 1
)

配列
(
    [BrandName] => アメリカズ ベスト バリュー イン
    [試行 1] => 0
)

更新 #3わかりました、申し訳ありません。列Nameは でしたlatin1_swedish_ci
コラムを更新しましたName

ALTER TABLE establishment MODIFY NAME VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci;

これはmb_convert_string()now なしで機能するはずです。

4

3 に答える 3

0

置くだけ

mysqli_set_charset($db_connection, 'utf8');

データベース接続後。

$con=mysqli_connect("localhost", "root", "xxxxx","database");
mysqli_set_charset($con, 'utf8');
于 2013-08-04T07:31:10.773 に答える
-1

ここで多くの混乱が見られると私が言える唯一のことは

  • 準備済みステートメントは、データ置換の方法のみを実装しているため、ここでは関係ありませんが、データ自体は変更しません。データベースに直接値を追加すると、同じ結果が得られます。
  • mb_convert_string は、不正な組み合わせの照合エラーを引き起こすことはありません。このエラーは、データ形式ではなく、内部の内部エンコーディングの競合によって引き起こされるためです。
  • 保存された値がチェックに使用された値と等しいことを証明するコードはありません

Adams’ Inn America’s Best InnIDに基づいて値を取得できると仮定すると、それを取得してから手動で比較することをお勧めします。var_dump() それら。それでも違いがわからない場合は、最初に urlencode() を実行してください

于 2013-02-16T09:11:47.383 に答える
-2

これで問題は解決しました:

iconv('windows-1250', 'utf-8', $EstablishmentName);
于 2013-02-22T08:56:28.507 に答える