尝试使用OCI访问数据库时出现以下错误:
oci_parse()期望参数1为资源,
oci_bind_by_name()期望参数1是资源,
oci_fetch_array()期望参数1是资源,
连接正常,我查了一下。
这是我的代码:
//<?php
class Connecter
{
protected $tns = null;
protected $account = 'acc';
protected $password = 'pass';
public $conn;
public function __construct()
{
$tns = "
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST=)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)";
$this -> conn = oci_connect("acc", "pass", $tns);
return $this->conn;
}
} //
/*<?php
include "domains/Connecter.php";
$con = new Connecter();
$query = 'SELECT BLOBDATA FROM BTAB WHERE BLOBID = :MYBLOBID';
$stmt = oci_parse($con, $query);
$myblobid = 1;
oci_bind_by_name($stmt, ':MYBLOBID', $myblobid);
oci_execute($stmt);
$arr = oci_fetch_array($stmt, OCI_ASSOC);
$result = $arr['BLOBDATA']->load();
header("Content-type: image/JPEG");
echo $result;
oci_close($con);
?>
*/
答案 0 :(得分:0)
new Connecter()
将返回一个PHP对象,而不是资源,这是oci_parse()
所期望的。
您尚未发布Connecter.php
,因此无法准确说出需要更改的内容,但在某处您正在建立连接。您需要找到一种方法从您的类中获取返回的值,以便您可以使用它。由于您没有在代码的其余部分使用OOP结构,所以您应该放弃Connecter
类并始终使用过程方法。
附注:连接器拼写为 o
答案 1 :(得分:0)
如Hobo的回答所示,oci_parse
要求第一个参数是资源,而您传递的是包含资源的Connector
对象。因此,简单的解决方法是将代码更改为:
$con = new Connecter();
$query = 'SELECT BLOBDATA FROM BTAB WHERE BLOBID = :MYBLOBID';
$stmt = oci_parse($con->conn, $query);
然而,构建你的Connector
类并使其更像是一个OCI8数据库处理类来保存大部分或全部oci8函数(例如oci_parse
)可能更合适。考虑类似的事情:
protected function parse($query) {
$response = oci_parse($this->conn, $query);
return $response;
}
/* end of new method bit */
$con = new Connecter();
$query = 'SELECT BLOBDATA FROM BTAB WHERE BLOBID = :MYBLOBID';
$stmt = $conn->parse($query);