序文 この記事では主に、シングルクォートやバックスラッシュを含む値を挿入するMySQLステートメントに関する関連コンテンツを紹介します。詳しい紹介を見てみましょう。 例えば、次のような構造のテーブルがあります CREATE TABLE `アクティビティ` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(255) NOT NULL COMMENT 'アクティビティタイトル', 主キー (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='アクティビティ テーブル'; たとえば、レコードを挿入する場合のサンプル コードは次のようになります。 $servername = "xxxxサーバー名"; ポート番号 = 3306; $username = "xxxユーザー名"; $パスワード = "xxxpwd"; $dbname = "xxxxxxdb"; // 接続を作成します $conn = new mysqli($servername, $username, $password, $dbname, 8306); // 接続を確認する if ($conn->connect_error) { die("接続に失敗しました: " . $conn->connect_error); } $item['title'] = '明けましておめでとうございます!'; $sql = sprintf("アクティビティ (タイトル) に値 ( '%s') を挿入します);", $item['title']); var_dump($sql); $conn->query($sql) === TRUEの場合{ echo "挿入成功\n"; } それ以外 { echo "挿入に失敗しました:" . $conn->error; } $conn->close(); このコードは問題なく実行されます。しかし、コード内のタイトルが happy valentine's day! になると、構文エラーがあることを示す次のエラーが報告されます。
SQL ステートメント ユーザーが指定したデータをデータベースに挿入すると、上記のような状況が発生する可能性があります。どうすればこれを回避できるでしょうか? SQL 内の特殊文字をエスケープする必要があります。 $sql のコード行を次のように変更できます。 $sql = sprintf("アクティビティ (タイトル) に値 ( '%s') を挿入します);", mysqli_real_escape_string($conn, $item['title'])); 実際の SQL 文字列全体は次のようになります。 アクティビティ (タイトル) に VALUES ( 'ハッピーバレンタインデー!' ) を挿入します。" 時々問題が発生します。json_encode 後、その中の中国語の文字が Unicode コードに変換され、mysql に挿入されると、\ が食べられていることがわかります。 たとえば、2つの中国語文字のUnicodeコードは\u4e2d\u6587ですが、データベースに挿入すると、バックスラッシュが消費されてu4e2du6587になることがあります。 次のサンプルコードを参照してください。 $item['title'] = json_encode([ 'balbalbla' => '中国語' ]); $sql = sprintf("アクティビティ (タイトル) に値 ( '%s') を挿入します);", $item['title']); 実際の SQL 文字列全体は次のようになります。 アクティビティ (タイトル) に VALUES ( '{"balbalbla":"\u4e2d\u6587"}') を挿入します。 データベースに挿入されると、タイトル フィールドの値は これは、ここで \ がエスケープ文字として使用されているためです。実際、Unicode コード \ は、データベースに正しく挿入できるように再度エスケープする必要があります。 $item['title'] = json_encode([ 'balbalbla' => '中国語' ]); $sql = sprintf("アクティビティ (タイトル) に値 ( '%s') を挿入します);", mysqli_real_escape_string($conn, $item['title'])); 実際の SQL 文字列全体は次のようになります。 アクティビティ (タイトル) に VALUES ( '{\"balbalbla\":\"\\u4e2d\\u6587\"}') を挿入します。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: UbuntuにMySQLをインストールするときにデフォルトのパスワードを変更する詳細な手順
Navicatをインストールした後次のエラーが発生する場合があります: Client does no...
ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...
目次1. はじめに2. まずLinux環境を紹介しましょう3. TIME_WAIT状態遷移図4. 継...
初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...
この記事では、CSS ::markerの興味深い疑似要素を紹介します。これを使用すると、テキスト番号...
目次docker システム df docker システム プルーンdocker systemc 情報...
目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...
1. ユーザーを作成します。注文: 'password' によって識別される ...
目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...
【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...
1. 最近、Ubuntu の新しいバージョンをインストールしました。/etc/ssh/sshd_co...
1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...
この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...
目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...
デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...