質問
一重引用符または二重引用符で構成される値を MySQL に挿入するにはどうすればよいですか。つまり
This is Ashok's Pen.
一重引用符は問題を引き起こします。他にもエスケープ文字がある可能性があります。
データを適切に挿入するにはどうすればよいですか?
解決
は非常に簡単に言えます:
SELECT 'This is Ashok''s Pen.';
だから、文字列の中、彼ら二人とそれぞれ単一引用符を置き換えます。
それともます:
SELECT 'This is Ashok\'s Pen.'
)=それをエスケープ
他のヒント
MySQLで文字をエスケープする方法」のに私の答えを参照してください。 「の
あなたは、MySQLに話をするために使用していることは、例えば、内蔵のエスケープ機能を持つことになります。どのようなライブラリーPHPであなたはhttp://php.net/manual/en/ mysqli_real_escape_string のか<のhref = "使用することができますpdo.quote.php」のrel = "nofollowをnoreferrer"> PDO ::引用する
」エスケープ文字です。だからあなたの文字列がある必要があります:
あなたには、いくつかのフロントエンドのコードを使用している場合は、これは、アショク "のペンです。
、あなたは文字列は、ストアドプロシージャにデータを送信する前に置き換える行う必要があります。
たとえば、C#であなたが行うことができます。
value = value.Replace("'", "''");
、その後、ストアドプロシージャに値を渡す。
、ドライバーが任意のエスケープを処理します。例えば(Javaの):
Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
prepped.setString(1, line);
prepped.executeQuery();
}
conn.commit();
conn.close();
このコードを使用します:
<?php
$var = "This is Ashok's Pen.";
mysql_real_escape_string($var);
?>
データベースは、文字列の特殊文字を検出できないため、このは、あなたの問題を解決します。
これを行うには別の方法がありますが、見方によっては、より安全な場合もそうでない場合もあります。特定の文字列関数を使用するため、MySQL 5.6 以降が必要です。 FROM_BASE64
.
次のメッセージを挿入したいとします。
「ああ、ほとんど首なしのニックは優雅に手を振った」「それは重要ではない問題だ。。。。すごく参加したかったわけではないんです。。。。応募しようと思ったのですが、どうやら「条件を満たしていない」ようです。」
この引用符には一重引用符と二重引用符が多数含まれており、MySQL に挿入するのは非常に困難です。プログラムから挿入する場合、引用符などをエスケープするのは簡単です。ただし、これを SQL スクリプトに組み込む必要がある場合は、テキストを編集する必要があり (引用符をエスケープするため)、エラーが発生しやすくなったり、ワードラップなどの影響を受けやすくなったりする可能性があります。
代わりに、テキストを Base64 エンコードして、「クリーンな」文字列を作成できます。
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Base64 エンコーディングに関する注意事項:
- Base64エンコーディングは、 バイナリエンコーディング, MySQL は Base64 でエンコードされた文字列をバイトにデコードしてから解釈するため、エンコードを行うときは文字セットが正しいことを確認する必要があります。必ず
base64
と MySQL は文字エンコーディングについて合意しています (UTF-8 を推奨します)。 - Stack Overflow で読みやすいように、文字列を 50 列にラップしました。必要な数の列にラップしても (またはまったくラップしなくても)、引き続き機能します。
これを MySQL にロードするには:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
これにより、問題なく挿入され、文字列内のテキストを手動でエスケープする必要はありません。
あなたは\
文字を使用して特殊文字をエスケープする必要があります。
This is Ashok's Pen.
になります:
This is Ashok\'s Pen.
あなたは( ')残しておきたい場合は、このコードの下のデータベースの使用にアポストロフィ
$new_value = str_replace("'","\'", $value);
$ NEW_VALUEは、データベースに格納することができます。
あなたはこのコードを使用することができ、
<?php
$var = "This is Ashok's Pen.";
addslashes($var);
?>
mysqli_real_escape_string()が動作しない場合ます。
PHPでは、使用mysqli_real_escape_string ..
PHPマニュアルからの例:
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("Error: %s\n", mysqli_sqlstate($link));
}
$city = mysqli_real_escape_string($link, $city);
/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d Row inserted.\n", mysqli_affected_rows($link));
}
mysqli_close($link);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);
あなたがPHPを使用している場合は、ちょうどにaddslashes()関数を使用します。
プログラムによるアクセスのために、あなたは/ <プレースホルダを使用することができますA>自動的に安全でない文字をエスケープします。
PerlのDBIでは、例えば、あなたが使用することができます:
my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
)(addslahes()またはmysql_real_escape_stringのいずれかを使用します。
デルファイを使用して、私のやり方、ます:
"脱出" しTheString
TheString=" bla bla bla 'em some more apo:S 'em and so on ";
ソリューション:
StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);
結果:
TheString=" bla bla bla \'em some more apo:S \'em and so on ";
この機能を使用すると、問題なくMySQLでテキストフィールドを挿入または更新することができ、「\ '」ですべてのChar(39)を置き換えます。
同様の機能は、すべてのプログラミング言語で発見された!
たぶん、あなたは QUOTE
機能を見てみることができMySQLのマニュアルでを。