mysql_connect问题,资源类型'未知'

时间:2011-07-15 02:13:27

标签: php mysql

我在尝试访问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)?我已经在两个不同的地方测试了这个功能,它在一个而不是另一个工作!请帮忙!

@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;
}

1 个答案:

答案 0 :(得分:0)

我注意到了几个问题:

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

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

哦,BTW - 每当有人使用global时,上帝会杀死一只小猫。这是真的。他告诉我。无论是那个还是我有一些糟糕的玉米片。 (是的,我是这个问题的狂热者。这是一件好事。 相信我

无论如何,如果你需要一个函数内部的变量要么传入它,要么创建一个新类的属性(使StoreConfDB成为一个Singleton?让它可以通过工厂方法访问?你有很多选择) - 避免全球化的习惯会消除一些叫做unexpected side effects的讨厌的东西。