php mysql_connect 在同一host下多数据库mysql_select_db()的bug .

时间:2022-02-17 06:30:28

操作方法

创建两个数据库test1 test2 同一个host下面

分别在两个数据库中创建表

-- ----------------------------
-- Table structure for test_db
-- ----------------------------
DROP TABLE IF EXISTS `test_db`;
CREATE TABLE `test_db` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

SET FOREIGN_KEY_CHECKS = 1;

执行下面的php脚本


<?php



$db1=array(
    "host"=>"localhost", //注意两个数据库在同一个host下
    "port"=>"3306",
    "user"=>"root",
    "pass"=>"",
    "db"  =>"test",
);

$conn1 = mysql_connect($db1['host'].':'.$db1['port'],$db1['user'],$db1['pass']);
mysql_select_db($db1['db'],$conn1);


$db2=array(
    "host"=>"localhost", //注意两个数据库在同一个host下
    "port"=>"3306",
    "user"=>"root",
    "pass"=>"",
    "db"  =>"test1",
);

$SQL = "INSERT INTO `test_db`(`id`, `user`) VALUES (0, 'test1');";
$conn2 = mysql_connect($db2['host'].':'.$db2['port'],$db2['user'],$db2['pass']);

mysql_select_db($db2['db'],$conn2);


mysql_query($SQL,$conn1); //注意这里选择的是1号数据库

echo mysql_error();


//执行结果应该是插入在2号数据库了

?>

执行结果插入在2号数据库了
但是明明我们选择的是1号数据库啊 ...
接下来我们把两个数据库的host改成localhost和127.0.0.1

就好了,就好了 ...

总结

php mysql_connect 在同一个host下面的多数据库切换mysql_select_db()方法不起作用


//推荐使用 
//php官方已经不推荐使用mysql_connect了
$conn1=mysqli_connect($db1['host'].':'.$db1['port'],$db1['user'],$db1['pass'],$db1['db']); 


$conn2=mysqli_connect($db2['host'].':'.$db2['port'],$db2['user'],$db2['pass'],$db2['db']); 
mysqli_query($conn1,$SQL);