0

我将 PHP 5.2 与Oracle 数据库11.1 一起使用。

编码

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

导致此错误:

警告:oci_execute() [function.oci-execute]: ORA-00904: "COMMENTS":第159C:\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 回答