2012-08-01 62 views
0

我想用PHP PDO连接到数据库,我一直这样做:“错误:没有选择数据库”。我在PDO之前的代码工作得很好。任何人都可以看到我做错了什么?我是PDO的新手。PHP 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); 

回答

5

使用双引号

单引号不允许在他们的变量。

例如:

$dbconn = new PDO("mysql:host=$dbHost;port=3306;dbname=$dbName", $dbUser, $dbPass); 

或更好,以确保一切正确转义:

$dbconn = new PDO("mysql:host={$dbHost};port=3306;dbname={$dbName}", $dbUser, $dbPass); 
+0

嗯......试过两种方法(我的部分与引号愚蠢的错误)。虽然,我仍然得到“错误:没有选择数据库” – ryanpitts1 2012-08-01 20:56:11

+0

@ ryanpitts1请确保**所有**的变量都是正确的^ _^ – Neal 2012-08-01 20:57:45

+0

好吧,我责怪自己试图做得太快,而没有仔细考虑。我相信它实际上是使用mysql_query()的代码片段。我用上面的代码创建了一个空白页面(用sprintf - 感谢那个建议),一切都很好。感谢您的快速帮助,抱歉浪费任何人的时间。 ;) – ryanpitts1 2012-08-01 21:05:44

2

替代使用sprintf,让您的变数出字符串尼尔的回答是:

$dbconn = new PDO(
    sprintf('mysql:host=%s;dbname=%s', $dbHost, $dbName), 
    $dbUser, 
    $dbPass 
) 

还要确保生成的字符串是正确的,你应该打印:

print sprintf('mysql:host=%s;dbname=%s', $dbHost, $dbName); 

端口是MySQL的默认,而不是真的有必要指定。

+1

ehhh sprintf shmintf :-P – Neal 2012-08-01 20:57:14