我正试图用PHP PDO连接到一个数据库,但我一直收到这样的消息:"错误:未选择数据库"。我在PDO之前的代码运行得很好。有人看到我做错了什么吗?我是PDO的新手。
旧代码:
$dbHost = 'localhost:3306';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database_name';
$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to the database!');
mysql_select_db($dbname);
PDO代码:
$dbHost = 'localhost';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database_name';
$dbconn = new PDO('mysql:host=$dbHost;port=3306;dbname=$dbName', $dbUser, $dbPass);
使用双重报价
单引号中不允许包含变量。
例如:
$dbconn = new PDO("mysql:host=$dbHost;port=3306;dbname=$dbName", $dbUser, $dbPass);
或者更好的方法是确保所有内容都正确逃脱:
$dbconn = new PDO("mysql:host={$dbHost};port=3306;dbname={$dbName}", $dbUser, $dbPass);
Neal使用sprintf
从字符串中获取变量的答案的替代方案:
$dbconn = new PDO(
sprintf('mysql:host=%s;dbname=%s', $dbHost, $dbName),
$dbUser,
$dbPass
)
此外,为了确保生成的字符串是正确的,您应该打印它:
print sprintf('mysql:host=%s;dbname=%s', $dbHost, $dbName);
端口3306是MySQL的默认端口,不需要指定。