林不知道这是可能的。 这里是我
if ($_REQUEST[db]=="abcd"){
$result =$abcdsqli->query("SELECT * FROM ...");
}elseif ($_REQUEST[db]=="efgh"){
$result =$efghsqli-> ...
}
这里是我想要的
$result =$.$_REQUEST[db].sqli->query("SELECT * FROM ...");
林不知道这是可能的。 这里是我
if ($_REQUEST[db]=="abcd"){
$result =$abcdsqli->query("SELECT * FROM ...");
}elseif ($_REQUEST[db]=="efgh"){
$result =$efghsqli-> ...
}
这里是我想要的
$result =$.$_REQUEST[db].sqli->query("SELECT * FROM ...");
为什么需要这么多mysqli
对象?
并使用$_RESQUEST
在你的代码,以便公开这样可能会导致您的网站很多很多的黑客。
只使用一个( 一个 [1])的mysqli对象。
我建议不要将此但是这是你想要的东西:
$sql = "{$_REQUEST['db']}sqli";
$$sql->query("SELECT * FROM ...");
所以,如果$_REQUEST['db'] == 'abc'
这将是这样做的:
$abcsqli->query("SELECT * FROM ...");
你提的问题是非常适合使用一个单独的工厂模式。 此代码是骨骼,意思是有0验证等,但应该给你一个想法。
class Database
{
private static $dbos = array();
public static function getDbo($dboKey)
{
if (!isset(self::$dbos[$dboKey])) {
switch ($dboKey) {
case 'abcd':
$dbo = new mysqli('localhost', 'my_user', 'my_password', 'my_db_1');
break;
case 'efgh':
$dbo = new new mysqli('localhost', 'my_user', 'my_password', 'my_db_2');
break;
}
self::$dbos[$dboKey] = $dbo;
}
return self::$dbos[$dboKey];
}
}
$result = Database::getDbo($_REQUEST[db])->query("SELECT * FROM ...");