22

MySQLでは、バックスラッシュをテーブルに挿入しようとすると、それを受け入れず、バックスラッシュのないコンテンツが表示されます。

id自動インクリメントに設定されています:

コード:

INSERT INTO gender (sex, date) VALUES (
'male are allowed \ female are not allowed', "2012-10-06")

リテラルの円記号を挿入するにはどうすればよいですか?

エスケープシーケンスに関する注意:

Escape  Sequence    Character Represented by Sequence

\0     An ASCII NUL (0x00) character.
\'     A single quote (“'”) character.
\"     A double quote (“"”) character.
\b     A backspace character.
\n     A newline (linefeed) character.
\r     A carriage return character.
\t     A tab character.
\Z     ASCII 26 (Control+Z). See note following the table.
\\     A backslash (“\”) character.
\%     A “%” character. See note following the table.
\_     A “_” character. See note following the table.
4

3 に答える 3

29

バックスラッシュをエスケープする必要があります:

INSERT INTO gender
(sex, date) VALUES (
'male are allowed \\ female are not allowed',
"2012-10-06")

参照(mysqlのためにエスケープする必要があるすべての文字のリストを含む)

于 2012-10-07T16:35:26.103 に答える
9

mysqlロードデータファイルツールでバックスラッシュとすべての制御文字を処理します。

ステップ1、テーブルを作成します。

mysql> create table penguin (id int primary key, chucknorris VARCHAR(4000));
Query OK, 0 rows affected (0.01 sec)

ステップ2、インポートするファイルを作成し、そこにこのデータを配置します。

1   spacealiens are on route
2   scramble the nimitz\
3   \its species 8472
4   \\\\\\\\\\\\\\\\\\
5   Bonus characters:!@#$%^&*()_+=-[]\|}{;'":/.?>,< anything but tab

ステップ3、テーブルに挿入します。

mysql> load data local infile '/home/el/foo/textfile.txt' into table penguin 
       fields terminated by '\t' lines terminated by '\n' 
       (@col1, @col2) set id=@col1, chucknorris=@col2;
Query OK, 4 rows affected, 1 warning (0.00 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 1

ステップ4、そしてもちろん、それはこの奇妙な出力を引き起こします:

mysql> select * from penguin;
+----+-----------------------------------------------------------------+
| id | chucknorris                                                     |
+----+-----------------------------------------------------------------+
|  1 | spacealiens are on route                                        |
|  2 | scramble the nimitz                                             |
|  3 |                                                                 |
|  4 | \\\\\\\\\                                                       |
|  5 | Bonus characters:!@#$%^&*()_+=-[]|}{;'":/.?>,< anything but tab |
+----+-----------------------------------------------------------------+

ステップ5、警告を分析します。

mysql> show warnings;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+------------------------------------- ------------------+
| Warning | 1262 | Row 2 was truncated; it contained more data than there |
|         |      | were input columns                                     |
+---------+------+--------------------------------------------------------+
1 row in set (0.00 sec)

ステップ6、何が悪かったのかを正確に考えます。

左側のバックスラッシュnimitzにより、mysqlロードデータパーサーは2行目の終わりを3行目の始まりと連結しました。次に、タブにぶつかり、'nimitz\n3を行2にスクランブルします。

行3の残りの部分は、余分な単語its species 8472がどこにも収まらないためスキップされ、上記の警告が表示されます。

行4には18個のバックスラッシュがあったため、問題はなく、それぞれがエスケープされたため、9個のバックスラッシュとして表示されます。奇数があった場合、行2のエラーは行4で発生します。

5列目のボーナスキャラクターは正常に通過しました。タブ以外はすべて許可されます。

ステップ7、テーブルペンギンをリセットします。

mysql> delete from penguin;

fields escaped byステップ8、次の句を使用してテーブルにロードします。

mysql> load data local infile '/home/el/foo/textfile.txt' into table penguin 
       fields terminated by '\t' escaped by '\b' 
       lines terminated by '\n' (@col1, @col2) set id=@col1, 
       chucknorris=@col2;

Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0

ステップ9、テーブルから選択し、結果を解釈します。

mysql> select * from penguin;
+----+------------------------------------------------------------------+
| id | chucknorris                                                      |
+----+------------------------------------------------------------------+
|  1 | spacealiens are on route                                         |
|  2 | scramble the nimitz\                                             |
|  3 | \its species 8472                                                |
|  4 | \\\\\\\\\\\\\\\\\\                                               |
|  5 | Bonus characters:!@#$%^&*()_+=-[]\|}{;'":/.?>,< anything but tab |
+----+------------------------------------------------------------------+
5 rows in set (0.00 sec)

そして今、すべてが私たちが期待する通りです。2行目の終わりの円記号は改行をエスケープしません。3行目の前の円記号iは何もしません。行4の18個の円記号はエスケープされません。そして、ボーナスキャラクターは大丈夫です。

于 2014-01-17T04:58:10.823 に答える
1

このコードを使用できます:

$yourVariable = addcslashes($_POST["your param"],"\\");

たとえば、私のWebフォームでは、ローカルディレクトリを挿入します。

$localAddress = addcslashes($_POST["localAddress"],"\\");
于 2020-03-07T10:14:03.950 に答える