mysql_real_escape_stringおよび一重引用符
-
05-07-2019 - |
質問
かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = mysql_real_escape_string(かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = stripslashes($r["lname"]);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
$search = mysql_real_escape_string(かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = mysql_real_escape_string(かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = stripslashes($r["lname"]);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>
前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>
ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
POST['lname']);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
<*>
これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>
前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>
ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
GET['search']);
かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = mysql_real_escape_string(かなりイライラしています。 O'Connorのように、単一引用符でデータベース名に挿入できるようにします。
だから、DBに挿入するときは:
$lname = stripslashes($r["lname"]);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
<*>
これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>
前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>
ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
POST['lname']);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
<*>
これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>
前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>
ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
SESSION['search'] = $search;
これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>
前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>
ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
POST['lname']);
そして、$ lnameをDBに挿入します。
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
<*>これはすべて正常に動作するようです。ただし、姓を検索して結果を表示する検索機能があります。検索するときは、結果を得るためにO \ 'Connorを検索する必要があります。
検索した後、テキストボックスには、検索したばかりの値が(セッションを使用して)自動的に保存されます。だから私のコードはこれです:
<*>前に言ったように、検索するときには&quot; O \ 'Connor&quot;を使用する必要があり、検索後、テキストボックスの値は&quot; O \\\\' Connor&quot;になります
これを理解しようとしていらいらしていました。誰かが私が間違っていることを知っていますか?ありがとう!
編集:
マジッククオートに関するphp5.iniファイルを次に示します。
<*>ただし、私のサイトはGoDaddyでホストされており、ファイルを編集する権限がありません:(
解決
マジッククォートがPHP設定で有効になっているようです。
実際に有効になっているかどうかを確認するには:
echo get_magic_quotes_gpc();
無効にするには、php.iniファイルを編集します。
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
または、この行を.htaccessに追加します:
php_flag magic_quotes_gpc Off
他のヒント
マジッククオートが有効になります。これが意味するのは、postやgetや他の同様の場所に置かれたものはすべて自動的にエスケープされるため、初心者プログラマーはそれほど心配する必要はありません。正しく覚えていれば、現在のバージョンのPHPでは非推奨です。
これに対処し、どの構成からも同じスクリプトを実行するために行うことは次のとおりです。
function fixinput($value){
if (get_magic_quotes_gpc()){
$value = stripslashes($value);
}
return mysql_real_escape_string($value);
}
これをさらに修正して、非数値データを引用符で囲むようにすることもできますが、これは一般的なバリエーションですが、これらの引用符を手動で配置する方が良いと思います。
fixinput関数を少し編集して、PHPのインストールに実際のエスケープ文字列があるかどうかを確認します(古いバージョンにはありません):
function fixinput($value){
if (get_magic_quotes_gpc()){
$value = stripslashes($value);
}
if (function_exists('mysql_real_escape_string')) {
return mysql_real_escape_string($value);
}
else {
return mysql_escape_string($value);
}
}
DBにある場合、O \ 'Connorとして表示されます。
したがって、Webアプリケーションでその姓を思い出す場合、次を使用する必要があります。
$lname = stripslashes($r["lname"]);
間違っています! mysql_real_escape_string
で文字列をエスケープすると、クエリ内でのみエスケープされます。データベースはクエリを解釈するため、データはエスケープ文字なしでデータベースに格納されます。データベースからデータを引き出す際に stripslashes
を使用する必要はありません 。実行すると思われる場合は、データベース内のデータが破損していることを意味します。最も可能性が高いのは、魔法の引用符がオンになっているためです。
すべきこと:
- マジッククオートを無効にするか、その効果をグローバルに反転します。詳細については、マニュアルを参照してください。
- バインドパラメーター(最良の解決策)またはすべての変数を
mysql_real_escape_string
でエスケープします。クエリを作成する場所でこれを行う必要があります。 - データベースから引き出すものに対しては何もしません。
特に、 fixinput
およびここの回答の一部にリストされているバリアントの関数を作成しないでください。これは、http-requestから来ていないデータを台無しにするので、問題を解決する間違った方法です。
get_magic_quotes_gpc
のオン/オフを確認しません。
私はただ $ lname = mysql_real_escape_string(stripslashes($ _ POST ['lname']));
を行うだけなので、引用されたテキストがない場合はスラッシュを削除しません。それらを取り除きます。
そしてそれは私にとって驚異的に機能します!
する必要があるのは、検索クエリ、mysql_real_escape_stringを取得することだけです。これで問題ありません。ただし、これを行うための最良の方法は、エスケープされたものを保存せず、代わりにエスケープするだけです。すべてがデータベースに保存されます。
代わりに、これを行います:
する必要があるのは、検索クエリ、mysql_real_escape_stringを取得することだけです。これで問題ありません。ただし、これを行うための最良の方法は、エスケープされたものを保存せず、代わりにエスケープするだけです。すべてがデータベースに保存されます。
代わりに、これを行います:
<*>SESSION['search'] =する必要があるのは、検索クエリ、mysql_real_escape_stringを取得することだけです。これで問題ありません。ただし、これを行うための最良の方法は、エスケープされたものを保存せず、代わりにエスケープするだけです。すべてがデータベースに保存されます。
代わりに、これを行います:
<*>GET['search']; $search = mysql_real_escape_string(する必要があるのは、検索クエリ、mysql_real_escape_stringを取得することだけです。これで問題ありません。ただし、これを行うための最良の方法は、エスケープされたものを保存せず、代わりにエスケープするだけです。すべてがデータベースに保存されます。
代わりに、これを行います:
<*>GET['search']);