我有四个包含不同表的数据库,让我们调用数据库admindata
,userdata
,pagedata
和mediadata
。
目前我为所有数据库使用了一个mysqli实例:
$mysqli = new mysqli(...);
我将此实例保持打开状态,直到页面加载结束。我不确定性能,所以当我在一个脚本中有多个查询时,我就像这样进行数据库切换:
$mysqli->query('SELECT fields FROM database1.table1');
$mysqli->query('SELECT fields FROM database2.table2');
而不是:
$mysqli->select_db('database1');
$mysqli->query('SELECT fields FROM table1');
$mysqli->select_db('database2');
$mysqli->query('SELECT fields FROM table2');
这两项中的哪一项表现更好?或者更好的是为每个数据库保存一个mysqli
实例,如下所示:
$mysqli->query('SELECT fields FROM table1');
$mysqli2 = new mysqli(...);
$mysqli2->query('SELECT fields FROM table2');
修改:
在php.net上有人在两年前写过:
In some situations its useful to use this function for changing databases in general. We've tested it in production environment and it seams to be faster with switching databases than creating new connections.
http://ch2.php.net/mysqli_select_db
听到更多关于它的信息会很高兴。
答案 0 :(得分:1)
我被教导,最好每个数据库/每个用户保持单独的连接。不仅仅是因为安全问题,还有代码的灵活性。将来,如果您想开始使用ORM,那么重写使用单个连接的代码对于多个数据库来说将是非常困难的。它也可能有助于调试数据库问题。
另一方面,每个请求有很多连接的潜在问题。在我领先的项目中,我们确实使用了单独的连接,但我们注意在不再需要时关闭它们。
我认为没有通用的解决方案,一切都取决于您自己的需求和要求。