0

我收到错误(不是真正的错误,只是无法正常工作),我试图弄清楚它是否与我的 sql 连接有关。我与两个完全不同的数据库有 2 个单独的连接。

$dshost = "kjbkb";
$dsdatabase = "kjhk";
$dsusername = "hjgfytdf";
$dspassword = "jhv";
mysql_connect($dshost,$dsusername,$dspassword);
mysql_select_db($dsdatabase) or die( "Unable to select database");

$sql = "SELECT * FROM users WHERE `username` = '".$_POST['paydl']."'";
$cheeseburger = mysql_query($sql);
$res = mysql_fetch_array($cheeseburger);
$autobus_user = $res['id'];

mysql_close(); //close first connection

$db_host = "khgv";
$db_user = "trdstx";
$db_password = "txz";
$db_database = "gfxx";
mysql_connect($db_host, $db_user, $db_password) or die("Unable to connect to host");
mysql_select_db($db_database) or die( "Unable to select database");

$ASDFASDF = "SELECT * FROM `autobus` WHERE `user_id` = '".$autobus_user."' LIMIT 3";
$BobDoleDontNeedThis = mysql_query($ASDFASDF);
$resnumbatwo = mysql_fetch_array($BobDoleDontNeedThis);

mysql_close(); //close 2nd connection

我这样做对吗?为什么$resnumbatwo返回错误?

4

5 回答 5

4

在 PHP 中使用多个 MySQL 连接时,您必须提供第四个参数,告诉 PHP 像这样实际创建新连接(这非常重要,如果您使用到同一主机的两个连接):

$db1 = mysql_connect($host1, $user1, $passwd1, true);
$db2 = mysql_connect($host2, $user2, $passwd2, true);

如果没有使用第四个参数,并且参数相同,那么 PHP 将返回相同的链接,并且不会建立新的连接。

在此之后,您应该使用带有额外参数的“mysql_query”,而不是定义要使用的连接:

$res1 = mysql_query($sql1, $db1) or die(mysql_error($res1));
$res2 = mysql_query($sql2, $db2) or die(mysql_error($res2));

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

查看更多信息:
http ://www.php.net/manual/en/function.mysql-connect.php

于 2013-02-27T11:42:54.267 回答
1

最好将每个连接处理程序保存在一个变量中并将其传输给对应的mysql_query()

例子:

$dbch1 = mysql_connect($dshost, $dsusername, $dspassword);
$dbch2 = mysql_connect($db_host, $db_user, $db_password);

$cheeseburger = mysql_query($sql, $dbch1);
$BobDoleDontNeedThis = mysql_query($ASDFASDF, $dbch2);
于 2013-02-27T10:42:52.700 回答
1

mysql_fetch_arrayfalse如果查询没有返回匹配的记录,将返回。请参阅API 参考文档中的以下条目:

返回值:

返回对应于获取的行的字符串数组,或者 FALSE如果没有更多的行。返回数组的类型取决于 result_type 的定义方式。通过使用MYSQL_BOTH (默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL_ASSOC,您只能获得关联索引(按 mysql_fetch_assoc()工作),使用MYSQL_NUM,您只能获得数字索引(按mysql_fetch_row()工作)。

于 2013-02-27T10:49:28.373 回答
0

您可以使用

$dbch1 = mysql_connect($dshost, $dsusername, $dspassword,true);
$dbch2 = mysql_connect($db_host, $db_user, $db_password,true);

$cheeseburger = mysql_query($sql, $dbch1);
$BobDoleDontNeedThis = mysql_query($ASDFASDF, $dbch2);
于 2015-04-06T12:59:31.137 回答
0

使用 php7 你可以使用 mysqli_change_user() 函数。

就像 php.net 页面上的示例一样:http: //php.net/manual/en/mysqli.change-user.php

于 2019-01-14T04:47:54.413 回答