1

我的代码

function db_fetch_array($query_id = '')
    {
        if(!$query_id)
        {
            $query_id = $this->query_result;
        }

        if($query_id)
        {
            // success
            $this->row[$query_id] = mysql_fetch_array($query_id);
            return $this->row[$query_id];
        }
        else
        {
            // failure
            return false;
        }
    }
4

2 回答 2

0

如果您想堆叠多个数据库连接,请考虑在构造函数中链接数据库并实例化其中几个类,您可以将它们保存在一个数组中。

例子:

class Database
{
    protected $link;
    public function __construct($user, $pass, $host) {
        $this->link = new Mysqli(/* ... */);
    }
    public function fetch($query) {
        $stmt = $this->link->prepare($query);
        /* ... */
    }

    /* ... */
}

现在将您的数据库放在一个数组中:

$db[0]  = new Database('root', 'root', 'server1');
$db[1]  = new Database('root', 'root', 'server2');
$db['bigCluster'] = new Database('user01', 'passwd', 'cluster.your.biz');

$result = $db[0]->fetch("SELECT * FROM table");

这样您就可以更好地访问、控制和调试更容易。

说一下你的代码:

function db_fetch_array($query_id = '') { /* .... */ }

此函数接受一个空参数,因此,允许用户从不存在的数据库连接中获取。这会导致错误。不允许!更好的是,输入提示:

public function db_fetch_array(\Mysqli $query_id) { /* .... */ }

一次性解决你所有的问题!

如果您需要按自己的方式使用它,请尝试以下操作,为您提供一个唯一的、可打印的 id 以用作数组键:

$query_id = md5((string)$query_id);

看看 Zend 代码风格指南和现代 PHP 设计模式,这将帮助您将代码质量提高百分之几。

于 2013-08-26T06:16:41.027 回答
0

对于初学者,我会做这样的事情:

if (empty($query_id))

代替

if (!$query_id)

因为 !$query_id 不检查空字符串

此外,错误似乎是使用 $query_id 作为数组键的问题。您可能需要找到不同的标识符

根据 divaka 在以下评论中的潜在替代方案:

用别的东西做钥匙。您可以先获取结果,然后获取行的 id 并将其应用为数组中的键

于 2013-08-26T06:03:36.630 回答