2012-08-01 91 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