ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效相关的知识,希望对你有一定的参考价值。

我正在尝试使用php执行的.sql文件中有一个SQL查询,但这给了我标题中提到的错误。但是,当我将其粘贴到sqlplus或从那里运行文件时,一切都很好。这是查询:

SELECT name,
        followers,
        friends,
        Nvl(no_of_tweets, 0) statuses,
        Nvl(mentioned, 0) mentioned,
        rts,
        Nvl(favs, 0) favs,
        ( ( 10 * followers + 5 * friends + 12 * Nvl(no_of_tweets, 0) + 15 *
                Nvl(mentioned, 0) + 14 * rts + 15 * Nvl(favs, 0) ) / 10 ) h_index
    FROM   users U
        left join (SELECT T.user_id_str,
                            Count(*)       AS no_of_tweets,
                            SUM(retweets)  rts,
                            SUM(favorites) favs,
                            mentioned
                    FROM   tweets T
                            left join (SELECT user_id_str,
                                            Count(*) AS mentioned
                                        FROM   mentions
                                        GROUP  BY user_id_str) M
                                    ON T.user_id_str = M.user_id_str
                    GROUP  BY T.user_id_str,
                                mentioned) C
                ON U.user_id_str = C.user_id_str
                ORDER BY h_index DESC;

哪些调试方法可以帮助我发现问题,或者此命令出了什么问题?

这是我的PHP代码:

$query = ':sql';
$st_sql = oci_parse($con, $query); 
oci_bind_by_name($st_sql, ':sql', file_get_contents($path)); 
$r = oci_execute($st_sql); 
if (!$r) { 
    $e = oci_error($st_sql);
    echo $e['message']; 
}
答案

您不能将查询绑定到参数。只需将查询从文件加载到$query变量中即可:

$query = file_get_contents($path);
$st_sql = oci_parse($con, $query); 
$r = oci_execute($st_sql);

以上是关于ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效的主要内容,如果未能解决你的问题,请参考以下文章

如何找出 datagrip 中的 ORA-00900 无效 SQL 语句

ora-00900 无效的 sql 语句立即执行

sql ORA-00900: 无效的 SQL 语句

使用简单循环插入时出现“ORA-00900 无效 SQL 语句”

SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句

Oracle.DataAccess.Client.OracleException: ORA-00900: 无效的 SQL 语句