0

OracleDatabase11.1でPHP5.2を使用しています

コード

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

このエラーが発生します:

警告:oci_execute()[function.oci-execute]:ORA-00904: "コメント":159行目のC:\ IODwww\hello.phpの識別子が無効です ^

しかし、これを実行すると正常に機能します。

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=1");

これは、クエリ文字列に複数の変数を挿入した結果ですか、それとも他の間違いを犯した結果ですか?

4

4 に答える 4

3

パフォーマンスとSQLインジェクションの両方の理由から、次のようにプレースホルダー変数を使用する必要があります。

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID = :pinID and COMMENTID = :commentID");
oci_bind_by_name($query, ':pinID', $pinID, -1, SQLT_INT);
oci_bind_by_name($query, ':commentID', $commentID, -1, SQLT_INT);
oci_execute($query);
于 2010-03-03T20:43:47.943 に答える
2

oci_execute()の警告はPHPの警告ではありません。結果のクエリに問題があります。

それを印刷して見てください。

于 2010-03-03T20:13:28.670 に答える
1

PHP文字列内の複数の変数に問題はありません。

問題をデバッグするには、次のことを試してください。

var_dump("SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

出力が本当に一致するかどうかを確認します。

string(...) "SELECT * FROM COMMENTS WHERE PINID=1 and COMMENTID=1" 

私が考えることができる唯一のことは、commentIDが空であるか、エラーの原因となる「\n」またはそれに付随する何かが含まれていることです。

データベースが出力するエラーコード「入力された列名が欠落しているか無効です。」は、で機能する場合はあまり意味がありません=1

于 2010-03-03T20:30:07.617 に答える
0

変数を角かっこで囲んでみてください。

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID={$pinID} and COMMENTID={$commentID}");

また、それ$commentIDが空白の値を返さないことを確認してください。空白の値COMMENTID=は最後に残り、クエリを実行しようとしたときにエラーが発生します。

于 2010-03-03T20:12:26.083 に答える