【问题标题】:Error when changing MySQL syntax to Oracle syntax in SQL code in PHP在 PHP 中的 SQL 代码中将 MySQL 语法更改为 Oracle 语法时出错
【发布时间】:2014-01-20 10:12:26
【问题描述】:

所以我让这个项目获取以前使用 MySQL 和现在使用 Oracle 的页面。所以我安装了 oci8 PHP 模块并创建了一个测试页面来进行更改。这是我正在更新的页面,我不是 Oracle 人员。我是 MySQL/PostgreSQL 人。

反正有这些原始参数:

$webIndex = mysql_db_query('main', 'SELECT * FROM links2');
while ($garbage = mysql_fetch_array($webIndex)) {
    $descriptions = $garbage['descr'];
    $urls = $garbage['url'];
    print "<a href=\"$urls\">$descriptions</a><br />";
    $i++;
}

所以我将这些行替换为:

$webIndex = oci_parse('main', 'SELECT * FROM links2');
while ($garbage = oci_fetch_array($webIndex)) {
    $descriptions = $garbage['descr'];
    $urls = $garbage['url'];
    print "<a href=\"$urls\">$descriptions</a><br />";
    $i++;
}

执行此操作后,跟踪 -f apache 错误日志并得到:

[Thu Jan 02 14:41:24 2014] [error] [client 10.10.102.75] PHP Warning:  oci_parse() expects parameter 1 to be resource, string given in /srv/www/htdocs/db/index-woods.php on line 15
[Thu Jan 02 14:41:24 2014] [error] [client 10.10.102.75] PHP Warning:  oci_fetch_array() expects parameter 1 to be resource, null given in /srv/www/htdocs/db/index-woods.php on line 17
[Thu Jan 02 14:41:24 2014] [error] [client 10.10.102.75] PHP Notice:  Undefined variable: pageText2 in /srv/www/htdocs/db/index-woods.php on line 105
[Thu Jan 02 14:41:24 2014] [error] [client 10.10.102.75] PHP Notice:  Undefined variable: pageText3 in /srv/www/htdocs/db/index-woods.php on line 106

最后两个错误与前两个有关。基于这些错误,oci_parseoci_fetch_array 似乎不正确。顺便说一句,这些是第 15 和 17 行。

再一次,我不知道甲骨文...

【问题讨论】:

  • the docs on oci_parse()开头第一个参数是连接链接资源,不是字符串。 mysql_db_query() 是一个旧的不推荐使用的函数,它在 oci_*() 下没有直接替代品
  • 这不是关于 Oracle,而是关于您对 PHP 函数的使用。阅读错误消息并更正对您正在执行的函数的调用。
  • oci_parse() 文档提供了有关如何准备、执行和获取行的示例。它与您的旧代码有些不同。
  • 由于您正在重写代码,与旧的 oci_*() 扩展相比,在 Oracle 中使用更便携的 PDO 可能会更好。

标签: php mysql oracle suse oci8


【解决方案1】:

这与是否了解Oracle无关。这与了解PHP有关。

PHP 警告:oci_parse() 期望参数 1 是资源,字符串在 /srv/www/htdocs/db/index-woods.php 第 15 行给出

你应该知道这个PHP是关于参数类型的警告,并且能够在手册中查找函数参数。

如果您查看documentation for oci_parse(),您会看到第一个参数应该是一个连接资源,您可以从oci_connect() 获得。还有一个使用 oci_connect() 的代码示例,随后使用 $conn 作为 oci_parse() 的第一个参数。

您的日志中出现以下错误都是由于对 oci_parse() 的调用无效。

始终检查每个 oci_parse() 和 oci_execute() 的返回值,因为如果有任何问题,这些函数会返回 false(这也在手册中说明)。在后续调用 oci_fetch_array() 和其他函数时,false 值不能用作查询资源。

在此处查看检查错误的示例:http://php.net/manual/en/function.oci-error.php

【讨论】:

  • 谢谢!你当然是对的。原来我需要对一些文件进行符号链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 2013-04-16
  • 2023-04-09
  • 2020-11-14
  • 1970-01-01
相关资源
最近更新 更多