开发者

mysql_connect issues, resource type 'Unknown'

开发者 https://www.devze.com 2023-03-20 06:04 出处:网络
I am having a problem when trying to access some functions in my mysql class. The function I have to connect to my database is 开发者_Go百科as follows:

I am having a problem when trying to access some functions in my mysql class. The function I have to connect to my database is 开发者_Go百科as follows:

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

And I create my mysql object using this:

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

Now I have a function that is supposed to grab all of the column names from a specified table. Code:

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

But I am getting errors, such as:

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

And if I try to remove the connection argument from the mysql_query call I get this:

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

Now I am running a debugger and have pinpointed what the problem is (I think). When the class works, the connection variable is set to: resource id='5' type='mysql link'

But when it calls the query function in the mysql class from inside the get_db_columns() function the connection variable is: resource id='5' type='Unknown'

So somehow the connection variable gets messed up even though both of the connection variables should be the same thing? (from $dbConf)? I've tested this function in 2 different places, it works in one and not the other! Please help!

@footy:

A print_r on $dbConf returns:

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

The query_DB_resource function:

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


I noticed a couple of issues:

You have mysql_error($connection) and mysql_error($db). Those aren't valid parameters. You should be using $this->connection in both cases. That will give you better error output.

Normally, it doesn't terribly matter if you pass in a connection resource to mysql_query, but in this case you may want to: mysql_query($query, $this->connection). While I can't say that that is a guaranteed fix, it is likely to help.

Oh, and BTW -- every time someone uses global God kills a kitten. It's true. He told me. Either that or I had some bad nachos. (Yes, I'm a zealot on this issue. It's a good thing. trust me)

Regardless, if you need a variable inside of a function either pass it in, or make a property of a new class (make the StoreConfDB a Singleton? Make it accessible by factory method? You have a number of choices) -- avoiding global as a habit removes something nasty called unexpected side effects.

0

精彩评论

暂无评论...
验证码 换一张
取 消