電子書籍の厳選無料作品が豊富!

宜しくお願い致します。
PHP+MySQLでシステムを構築しております。
PHPで作製したフォームからSQL文を発行する際に漢数字の『十』が含まれるとちゃんと検索されません。
ネットで調べてみたところ、この『十』はShift_jisでは『5c』文字となるため、『十』の2バイト目が『5c』(\と同じ)なので、2文字目が消されてしまい、うまく検索できないという事がのっておりました。
この現象を回避する為に、検索時に『十』の後にバックスラッシュ(\)を3個付加してみたところ、うまく検索できました。
そこで、PHPのフォーム上で正規表現により『十』を検索し、『十\\\』に置き換えてみようと試みたのですが、PHPのフォーム自体がShift_jisで作られている為、『十』を認識できず、PHPエラーが返されてしまいます。
こういった場合、どの様にすれば回避できるのでしょうか?
ご教授の程、宜しくお願い致します。

A 回答 (2件)

> mysql_real_escape_string() expects parameter 2 to be resource, null given


意訳すると、mysql_real_escape_string関数の2つ目のパラメータは資源型でなければならないが、実際には資源型ではなくnullだった、というような意味です。

mysql DBへの接続に失敗していませんかね?
まず、以下で切り分けしたら如何でしょうか。

$link = mysql_connect(*, *, *); // *は適宜書き換えて下さい
if (!$link) {
die('接続できませんでした: ' . mysql_error());
} else {
echo('接続しました');
}
    • good
    • 0
この回答へのお礼

ありがとうございます!
mysql_connectの前にこの関数を使っていました(-_-;)
今度はエラーが返らず正常な動作をしました。
具体的なスクリプトまでご記入いただき、誠にありがとうございます!
本当に助かりました!!

お礼日時:2006/10/31 22:07

まず、問題が発生するのは、「十」だけではありません。


正しくない対策をすると、セキュリティの面で脆弱になります。
ですので、しっかりと対策をすることをお勧めします。

何点か、一般的な注意事項を書きます。
・PHPとmysqlのエンコーディングを合せる
 PHPでinternal_encodingをSJISにするならば、MySQLの各種エンコーディング設定をSJISにした方が、問題が少ないです。
・php.ini設定で、magic_quotes_gpcをoffにする
 少なくともSJISを使う場合は必須です。
・addslashesを使わないでエスケープする
 方法1:mysql_real_escape_stringを使う
   例えば、$sql="select foo from bar where hoge='". mysql_real_escape_string($_GET['hoge']). "'";
 方法2:mysqli関数のmysqli_stmt_bind_paramなどを使う
   これについては、mysqlのバージョンの制限があります
   詳細は、PHPマニュアルを参照して下さい

この回答への補足

ありがとうございます。早速試してみました。
PHPのバージョンが4台なので、mysqli_stmt_bind_paramは使用できなかったので、mysql_real_escape_stringを使用してみました。
php.iniのmagic_quotes_gpcをOFFに設定し、mysql_real_escape_stringを使用してみたところ、下記の様なエラーが返って来ました。
mysql_real_escape_string() expects parameter 2 to be resource, null given
エラーの内容を直訳すると、
パラメータ2が資源(与えられるヌル)であるのを予想する
となっておりますが、何の事やらさっぱりです・・・

補足日時:2006/10/31 19:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!