PHP - 多数据库连接突然无法正常工作

时间:2014-07-04 07:15:00

标签: php mysql connection

我有2个数据库:

  • 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好像我只能运行一个连接,但昨天所有的连接都可以走路并且编码没有任何改变。感谢

3 个答案:

答案 0 :(得分:4)

问题在于您正在重复使用连接:

取自mysql_connect()的手册:

  

如果使用相同的参数对mysql_connect()进行第二次调用,   不会建立新链接,而是建立链接标识符   已经打开的链接将被退回。 new_link参数   修改此行为并使mysql_connect()始终打开一个新的   链接,即使之前使用相同的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_*函数,因为api IS 已弃用。 或者,您应该查看PDOMysqli Prepared Statements

更多笔记

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

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

既然你正在使用mysql,你应该看看mysql_error()这可能会抛出类似的消息:

The table TABLENAME doesn't exist in DATABASE

答案 1 :(得分:2)

使用代码 -

$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之后写的!

所以,您的bnoth查询将查找数据库品牌,如果您使用{{检查},将会抛出错误“表......未找到” 1}}

答案 2 :(得分:1)

$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']; 

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