gpt4 book ai didi

php - mysql_connect 问题,资源类型 'Unknown'

转载 作者:行者123 更新时间:2023-11-29 03:45:16 25 4
gpt4 key购买 nike

我在尝试访问我的 mysql 类中的某些函数时遇到问题。我必须连接到我的数据库的功能如下:

function connect_DB() {
$this->connection = mysql_connect($this->dbURL, $this->dbUser, $this->dbPass) or trigger_error('Connection failed: ' . mysql_error($connection), E_USER_ERROR);
$this->db = mysql_select_db($this->dbName, $this->connection) or trigger_error('Database selection failed: ' . mysql_error($db), E_USER_ERROR);
}

然后我使用这个创建我的 mysql 对象:

$dbConf = new StoreConfDB();
$dbConf->connect_DB();

现在我有一个函数可以从指定表中获取所有列名。代码:

function get_db_columns($table) {
global $dbConf;
print_r($dbConf->get_db());
$result = $dbConf->query_DB_resource('SELECT * FROM ' . $table);
for($i = 0; $i < mysql_num_fields($result); $i++) {
$meta = mysql_fetch_field($result, $i);
$fields[] = $meta->name;
}
mysql_free_result($result);
return $fields;
}

但是我收到错误,例如:

Warning: mysql_query(): 5 is not a valid MySQL-Link resource

如果我尝试从 mysql_query 调用中删除连接参数,我会得到:

Notice: Could not run query: No database selected in ...

现在我正在运行一个调试器并查明了问题所在(我认为)。当类工作时,连接变量设置为:resource id='5' type='mysql link'

但是当它从 get_db_columns() 函数内部调用 mysql 类中的查询函数时,连接变量是:resource id='5' type='Unknown'

所以即使两个连接变量应该是同一事物,连接变量也会以某种方式搞砸? (来自 $dbConf)?我已经在 2 个不同的地方测试了这个功能,它在一个地方有效,而在另一个地方无效!请帮忙!

@footy:

$dbConf 上的 print_r 返回:

StoreConfDB Object ( [dbURL] => localhost [dbUser] => root [dbPass] => [dbName] => db1 [connection] => Resource id #5 [db] => 1 )

query_DB_resource 函数:

function query_DB_resource($query) {
$sql_query = mysql_query($query) or trigger_error('Could not run query: '. mysql_error());
return $sql_query;
}

最佳答案

我注意到几个问题:

您有 mysql_error($connection)mysql_error($db)。这些不是有效参数。在这两种情况下,您都应该使用 $this->connection。这将为您提供更好的错误输出。

通常,将连接资源传递给 mysql_query 并不重要,但在这种情况下,您可能需要:mysql_query($query, $this->connection )。虽然我不能说这是一个有保证的解决方案,但它可能会有所帮助。

哦,顺便说一句——每当有人使用 global 时,上帝都会杀死一只小猫。这是真的。他告诉我。要么就是我吃了一些不好的 Jade 米片。 (是的,我是这个问题的狂热者。这是件好事。相信我)

无论如何,如果您需要函数内部的变量,要么将其传入,要么创建一个新类的属性(将 StoreConfDB 设为单例?使其可通过工厂方法访问?您有多种选择)——避免 global 作为一种习惯可以消除一些叫做 unexpected side effects 的讨厌东西.

关于php - mysql_connect 问题,资源类型 'Unknown',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com