[PHP-users 4190] 不正なSQL になる危険性について

Osamu Shigematsu php-users@php.gr.jp
Fri, 07 Dec 2001 10:59:57 +0900


重松です。こんにちは。

PHP というよりも、どちらかといえば SQL の問題の気もするのですが、

<input type="text" name="foo">

のようなフォームから受け取った文字列を

    // PEAR 使ってます。:-)
    $sql = "INSERT INTO bar(foo) VALUES('$foo')";
    $res = $db->query($sql);
    if($err = DB::isError($res)){
        print "database error : $sql\n" . DB::errorMessage($res);
        break;
    }

ってな感じで、登録としているのですが、例えば、foo に ' が含まれたりすると、

    INSERT INTO bar(foo) VALUES(''');

見たいにおかしなことになりますよね?

このほかにも何か注意するべき特殊な文字というのはあるのでしょうか?

NUL, " なんかは、PHP の設定によって、エスケープしてくれるように
記憶していますが。

とりあえず、' が使えないのはとっても困りますので、どのように SQL を
記述すればよいかなどのアドバイスをいただければ幸いです。

環境

    VineLinux 2.1.5
    PHP 4.0.6
    PostgreSQL 7.0.2

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp