3

このコード行の $1 と $2 はどういう意味ですか? それらは変数ですか?しかし、それらを文字列で使用するにはどうすればよいでしょうか?

$query = "select * from php_project.student where student_num=$1 and student_pass=$2";

編集:次の数行は次のとおりです。

        $stmt = pg_prepare($dbconn,"ps",$query);
        $result = pg_execute($dbconn,"ps",array($studentnum,$password));
        if (!$result){
            die("error in SQL query:".pg_last_error());
        }
4

1 に答える 1

7

$1 と $2 は変数ではありません。これらは、文字列内のプレースホルダーとして使用されています。

PHP では $(number first) は変数ではありません。自分で試してみてください:

$1 = "bob";
>> Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in php shell code on line 1

したがって、「$1」は実際には「$1」という文字列です。

str_replace を使用して、これを取得できます。

php > echo str_replace("$1", "'Bob'", $query);
>> select * from php_project.student where student_num='Bob' and student_pass=$2

アップデート

更新ごとに、pg_prepare は実際に次のように言っています。

パラメータが使用されている場合、それらはクエリ内で $1、$2 などとして参照されます。

したがって、あなたの場合、array($studentnum,$password)基本的にはクエリで $1 を '$studentnum' に、$2 を '$password' に置き換えますが、SQL インジェクション攻撃を防ぐために値を適切にエスケープします。

http://php.net/manual/en/function.pg-prepare.php

于 2013-04-02T01:34:47.123 に答える