2

我正在为应用程序使用两个数据库连接。建立的数据库连接如下

$allrights = @mysql_connect(DB_SERVER,DB_USER,DB_PASS);
if (!$allrights) {
    //die("Database connection failed: " . mysql_error());
    echo "Check ServerHost,Username,Password Of the DataBase<br/>";
}
// 2. Select a database to use 
$db_select = @mysql_select_db(DB_NAME,$allrights);
if (!$db_select) {
    //die("Database selection failed: " . mysql_error());
    echo "Incorrect DataBase Name";
}


// 1. Create a database connection
$readonly = @mysql_connect(DB_SERVER,READONLY_DB_USER,READONLY_DB_PASS);
if (!$readonly) {
    //die("Database connection failed: " . mysql_error());
    echo "Check ServerHost,Readonly-Username,Password Of the DataBase<br/>";
}
// 2. Select a database to use 
$db_select = @mysql_select_db(DB_NAME,$readonly);
if (!$db_select) {
    //die("Database selection failed: " . mysql_error());
    echo "Incorrect DataBase Name";
}

但是,在查询所有内容时,例如

$query=mysql_query("SELECT * FROM <tablename>");

两个连接都引用同一个数据库。查询数据时实际调用了哪些连接?

4

3 回答 3

3

要指定连接,请将其作为参数传递,例如:

$query=mysql_query("SELECT * FROM <tablename>", $allrights);

如果您不这样做,可以在以下文档中找到发生的情况mysql_query

如果未指定链接标识符,mysql_connect()则假定打开的最后一个链接。

另外,请注意红色背景上的大警告:

此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

于 2013-10-10T05:02:15.590 回答
1

使用mysql_connect()处理多个数据库连接时,您需要将 true 作为第四个可选参数 (new_link) 传递,如下所示

$readonly = @mysql_connect(DB_SERVER,READONLY_DB_USER,READONLY_DB_PASS, true);

您还需要提供链接标识符。

引用自 PHP 手册

如果使用相同的参数对 mysql_connect() 进行第二次调用,则不会建立新链接,而是返回已打开链接的链接标识符。new_link 参数修改了这种行为并使 mysql_connect() 始终打开一个新链接,即使之前使用相同的参数调用了 mysql_connect() 也是如此。在 SQL 安全模式下,此参数被忽略。

注意:听取其他人关于使用 mysqli_* 的建议。

于 2013-10-10T05:12:56.510 回答
0

使用这样的查询:

$query=mysql_query("SELECT * FROM <tablename>", $readonly); //the last parameter is the connection variable

注意:您必须使用mysqli_MySQL * 这是与from交谈的正确方式,PHP因为mysql_很快就会被弃用。

警告:正如 Hanky 웃 Panky 提到的那样,使用@将弃用警告,并且在连接失败和缺少数据库或数据库的其他一些问题的情况下,您最终将不会收到任何警告。

于 2013-10-10T04:59:08.723 回答