我正在尝试创建一个内容管理系统(CMS),我想让我的客户更轻松,所以我自己创建数据库。在尝试这样做时,遇到了一个问题。数据库没有被创建,所以我不能使用PDO连接。而且
mysql
已经被弃用,所以我也不能使用它。你有什么建议可以帮助我在数据库创建之前创建PDO连接吗?例如mysql_select_db()
的替代方法?mysql
已经被弃用,所以我也不能使用它。你有什么建议可以帮助我在数据库创建之前创建PDO连接吗?例如mysql_select_db()
的替代方法?你可以通过以下方式开始一个PDO连接,如果我有错请纠正我:
$db = new PDO("mysql:host=localhost", 'user', 'pass');
与普通连接不同的是,如你所见,已经去掉了dbname=[xx]
这部分内容。
当你想使用UTF-8连接时,还有一个免费提示:
$db = new PDO("mysql:host=localhost;charset=utf8mb4", 'user', 'pass');
为了回应 Yehonatan
的评论,你可以通过以下方式选择数据库:
$db->exec('USE databaseName');
$db = new PDO('mysql:host=localhost;', 'user', 'pass'); print_r($db->query('SHOW DATABASES')->fetchAll(PDO::FETCH_ASSOC));
,它有效运行 ;) - core1024UTF-8
时遇到了错误SQLSTATE[HY000] [2019] Unknown character set
,但是将其替换为charset=UTF8
后就可以正常工作了。 - Jeff Puckett使用空字符串也可以, 例如 dbname=;
不需要添加更多的逻辑来摆脱所有的dbname部分。
$db_name = '';
$pdo = new PDO(
sprintf('mysql:host=%s;dbname=%s;charset=%s',
$db_host, $db_name, $db_charset),
$db_user,
$db_pass
);
我发现唯一可行的方法是在运行任何查询之前使用$pdo->query('USE databasename')
来设置默认数据库。
只需删除dbname=
部分:
try {
$pdo = new PDO("mysql:host=localhost;", "user", "pass");
$stmt = $pdo->query("SHOW DATABASES");
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
}
catch (PDOException $e) {
echo $e->getMessage();
}
给我
array(11) {
[0]=>
array(1) {
["Database"]=>
string(18) "information_schema"
}
[1]=>
array(1) {
["Database"]=>
string(5) "cdcol"
}
[2]=>
array(1) {
["Database"]=>
string(5) "chica"
}
[3]=>
array(1) {
["Database"]=>
string(9) "downloads"
}
[4]=>
array(1) {
["Database"]=>
string(5) "mysql"
}
[5]=>
array(1) {
["Database"]=>
string(18) "performance_schema"
}
[6]=>
array(1) {
["Database"]=>
string(10) "phpmyadmin"
}
[7]=>
array(1) {
["Database"]=>
string(8) "rishumon"
}
[8]=>
array(1) {
["Database"]=>
string(4) "test"
}
[9]=>
array(1) {
["Database"]=>
string(5) "users"
}
[10]=>
array(1) {
["Database"]=>
string(7) "webauth"
}
}
如预期。