MySQL ステートメントに一重引用符またはバックスラッシュを含む値を挿入する方法

MySQL ステートメントに一重引用符またはバックスラッシュを含む値を挿入する方法

序文

この記事では主に、シングルクォートやバックスラッシュを含む値を挿入する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 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、's day!')' の行の近くで使用する正しい構文を確認してください。

SQL ステートメントINSERT INTO activity (title) VALUES ( 'happy valentine's day!');内の一重引用符がペアになっていないためです。

ユーザーが指定したデータをデータベースに挿入すると、上記のような状況が発生する可能性があります。どうすればこれを回避できるでしょうか?

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"}') を挿入します。

データベースに挿入されると、タイトル フィールドの値は{"balbalbla":"u4e2du6587"}になります。

これは、ここで \ がエスケープ文字として使用されているためです。実際、Unicode コード \ は、データベースに正しく挿入できるように再度エスケープする必要があります。

$item['title'] = json_encode([
  'balbalbla' => '中国語'
]);
$sql = sprintf("アクティビティ (タイトル) に値 ( '%s') を挿入します);", mysqli_real_escape_string($conn, $item['title']));

実際の SQL 文字列全体は次のようになります。

アクティビティ (タイトル) に VALUES ( '{\"balbalbla\":\"\\u4e2d\\u6587\"}') を挿入します。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題
  • MySQL で二重引用符の位置が誤っていたために起きた殺人事件の詳細な分析
  • シングルクォートを使用したMySQLクエリとシングルクォートを使用した文字列の挿入について
  • 単一引用符によって引き起こされる MYSQL パフォーマンス問題の分析
  • MySQL における引用符とバックティックの違いと使い方の詳細な説明

<<:  UbuntuにMySQLをインストールするときにデフォルトのパスワードを変更する詳細な手順

>>:  Vueでaxiosを簡単にカプセル化する方法

推薦する

MySQL 5.7 クラスタ構成手順

目次1. サーバーAのmy.cnfファイルを変更する2. サーバーBのmy.cnfファイルを変更する...

jsはテーブルの追加と削除の操作を動的に実装します

この記事の例では、jsでテーブルを動的に追加および削除するための具体的なコードを参考までに共有してい...

js を使用して XML オンライン エディターを作成する例

目次序文オンラインXMLエディタの必要性テクノロジー事前調査ビジュアルプログラミングVSCODEプラ...

MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順

目次1. MHAの紹介1. MHAとは何ですか? 2. MHAの構成3. MHAの特徴2. MySQ...

CentOS 7 で Python を 3.6.6 にアップグレードした後に発生する yum エラー問題の解決方法の概要

最近、テスト サーバーのオペレーティング システムを Cent0S 7.5 にアップグレードし、Py...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...

DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...

VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

次のような要件があります: インポート ボタン。ボタンをクリックして Excel テーブルをインポー...

熟練デザイナーの7つの原則(2):色の使い方

<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...

MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルは、一時的なデータを保存する必要がある場合に非常に便利です。一時テーブルは現...

JS上級編ES6の6つの継承方法

目次1. プロトタイプチェーン継承2. コンストラクタによる継承3. 組み合わせ継承4. プロトタイ...

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

データベースインデックスの知識ポイントの概要

目次ファーストルックインデックスインデックスの概念インデックスファイルの構成インデックスの役割SQL...