PHP-多数据库连接突然不工作


PHP - Multi DB Connection suddenly not working

我有两个数据库:

  • news_db。有桌子:t_news
  • 品牌。拥有表格:t_branding

我有数据库连接:

$con1 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('news_db', $con1);
$con2 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('branding', $con2);

我的代码:

$dataNews = mysql_fetch_assoc(mysql_query("SELECT * FROM t_news",$con1));
echo $dataNews['title']; /* it is working, showing "Test Title" */
$dataBrand = mysql_fetch_assoc(mysql_query("SELECT * FROM t_branding",$con2));
echo $dataBrand['title']; /* it is not working, nothing to show */

但如果我反转查询,比如:

$dataBrand = mysql_fetch_assoc(mysql_query("SELECT * FROM t_branding",$con2));
echo $dataBrand['title']; /* it is working, showing "Test Brand Title */
$dataNews = mysql_fetch_assoc(mysql_query("SELECT * FROM t_news",$con1));
echo $dataNews['title']; /* it is not working, nothing to show" */

有人能帮我吗,为什么突然php和mysql好像我只能运行一个连接,但昨天所有的连接都可以行走,编码什么都没有改变。感谢

问题是您正在重用连接:

取自mysql_connect():手册

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

您应该将第四个(true,即$new_link(参数解析为第二个连接,如下所示:

$con1 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('news_db', $con1);
$con2 = mysql_connect('127.1.0.0', 'root', 'root', true); 
mysql_select_db('branding', $con2);

如上所述,您应该避免使用mysql_*函数作为apiIS折旧。或者,您应该查看PDOMysqli Prepared Statements

更多注意事项

你应该在开发时打开错误报告,以确保你不会遇到任何问题:

ini_set('display_errors', 1);
error_reporting(E_ALL);

既然您使用的是mysql,那么您应该看看mysql_error(),它可能会抛出一条类似于的消息

The table TABLENAME doesn't exist in DATABASE

使用代码-

$con1 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('news_db', $con1);
$con2 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('branding', $con2);

或者,

$con1 = mysql_connect('127.1.0.0', 'root', 'root'); 
$con2 = mysql_connect('127.1.0.0', 'root', 'root'); // this line is redundant, both lines are same
mysql_select_db('news_db', $con1);
mysql_select_db('branding', $con2); // this will be selected 

效果将是-数据库品牌将被选中,news_db不会被选中,因为它是在news_db之后写的!

因此,如果您使用mysql_error()

进行检查,那么您的所有查询都将查找数据库品牌,并将抛出错误">表……未找到">

$con1 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('news_db', $con1);

$dataNews = mysql_fetch_assoc(mysql_query("SELECT * FROM t_news",$con1));
echo $dataNews['name'];
$con2 = mysql_connect('127.1.0.0', 'root', 'root'); 
mysql_select_db('branding', $con2);
$dataBrand = mysql_fetch_assoc(mysql_query("SELECT * FROM t_branding",$con2));
echo $dataBrand['title']; 

您可以使用此代码。我认为这对你有帮助。