【发布时间】:2020-01-13 15:21:38
【问题描述】:
我有 cerb2 https://github.com/wgm/cerb2,它是一个旧的票务系统,它可能看起来很奇怪,但我有很多我想利用的知识信息。 它基本上是一个带有 mysql_connect() 构造函数的 PHP5/Mysql 软件
主要问题是始终保持为空的查询。代码库基于类定义和伪变量 $this 来调用另一个类的查询方法。
function CER_HASH_QUEUES(&$parent)
{
global $session;
global $queue_access; e();
$this->db = (new cer_Database())->getInstance();
$this->_parent = &$parent;
if(empty($queue_access))
$this->queue_access = new CER_QUEUE_ACCESS();
else
$this->queue_access = $queue_access;
$sql = "SELECT q.queue_id, q.queue_name FROM queue q ORDER BY q.queue_name";
$res = $this->_db->query($sql);
最后一行 ($res =... ) 正在停止代码执行:
致命错误:在 null in 上调用成员函数 query()
从 cer_Database.class 调用的 Query 方法如下所示 (https://raw.githubusercontent.com/wgm/cerb2/stable/cerberus-api/database/cer_Database.class.php)
function query($sqlString,$return_assoc=true)
{
$config_db = (new cerConfiguration())->getInstance();
if($return_assoc === true) $this->db->SetFetchMode(ADODB_FETCH_ASSOC);
else $this->db->SetFetchMode(ADODB_FETCH_NUM);
$res = $this->db->Execute($sqlString);
if($cfg->settings["debug_mode"]) {
$time_end = microtime();
$query_time = microtime_diff($time_end,$time_start) * 1000; // convert secs to millisecs
echo "<b>[CERBERUS QUERY]:</b> " . $sqlString . " (Ran: <b>" . sprintf("%0.3f",$query_time) . "ms</b>)<hr>";
}
return $res;
}
最后一个方法依赖于第二个类 cerConfiguration(),它依赖于 import_config_db() 来构造 mysql 连接器。 我无法弄清楚如何按照此处相关软件携带的设计模式成功传递我的 sql 请求。 数据库和表都正常,下面的 php 脚本返回 sql 查询正常。
<?php
include('includes/third_party/adodb/adodb.inc.php');
$db = ADONewConnection('mysql');
$db->Connect("localhost", "user", "pass", "databasename");
$rs = $db->Execute('SELECT q.queue_id, q.queue_name FROM queue q ORDER BY q.queue_name');
print "<pre>";
print_r($rs->GetRows());
print "</pre>";
我想如果没有 PHP 使用的面向对象设计模式的理解,我将很难恢复那个旧软件。
非常欢迎任何帮助,想法。 你的。
【问题讨论】:
标签: php pool mysql-connect