2013-06-23 81 views
3

首先我剛換我所有PHP文件中使用PDO的連接到MySQL,所以這是幸福的。不過我對PHP並不是很有經驗,更不用說PDO,所以我遇到了問題。我在我的SQL數據庫中運行以下查詢,並返回正確的值。不能正常使用PDO

SELECT * 
FROM table_gon_0621_516 
WHERE id = '1' 

現在我在PHP使用像這樣

require_once ("../Android/connect_db.php"); 

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$table_name = 'table_gon_0621_516'; 

try { 

    $names = $db->query(" 
     SELECT * 
     FROM `".$table_name."` 
     WHERE `id` = '1' 
     "); 

    $rows = $names->fetchAll(PDO::FETCH_ASSOC); 
    $col_map = array_flip($rows); 
    echo '<pre>', print_r($rows, true), '</pre>'; 
} catch (PDOException $e){ 
    die($e->getMessage()); 
}  

,我在我的瀏覽器

SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected 

得到這個錯誤,這是我的連接代碼

<?php 

$config['db'] = array (
    'host'  => 'localhost', 
    'username' => 'admin', 
    'password' => 'xxxx', //checked and correct 
    'dbname' => 'xxxx_beta' //checked and correct 
); 

$db = new PDO(
    'mysql:host = '.$config['db']['host'].'; 
    dbname = '.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 
?> 

此頁面正確加載,沒有錯誤,我連接成功。我究竟做錯了什麼?

編輯

我改變

$data = $names->fetchAll(PDO::FETCH_ASSOC); 

$data = $names->fetch(PDO::FETCH_ASSOC); 

,我仍然有同樣的問題。我也更新上面的代碼顯示這種變化

第二編輯

我改變了上面,現在我的代碼收到新的消息,我假設我沒有連接?

+0

是完整的錯誤報告和顯示屏上嗎? – 2013-06-23 21:43:36

+1

由於您正在將''table_name''粘貼到查詢中,因此您可以用''FROM'$ table_name''替換''FROM'「。$ table_name。」'''。 – mzedeler

+0

@mzedeler很好,我不知道,我會試試看。謝謝! –

回答

4

變化

$db = new PDO(
    'mysql:host = '.$config['db']['host'].'; 
    dbname = '.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 

$db = new PDO('mysql:host='.$config['db']['host'].';dbname='.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 

$db = new PDO(
    "mysql:host={$config['db']['host']};dbname={$config['db']['dbname']}", 
    $config['db']['username'], 
    $config['db']['password'] 
); 

顯然MySQL的PDO驅動不喜歡DSN空間。

mysql:host='.$config['db']['host'].';dbname='.$config['db']['dbname'] 
      ^^        ^^ 
+0

不開玩笑?我只是想讓閱讀變得容易......哈哈。我會嘗試這個,我真誠地希望你是對的 –

+1

它的工作!我無法相信這是問題所在,因此很容易閱讀代碼。如果我必須從現在開始,我會把它放在一條線上。非常感謝。 –

+0

@i_me_mine您仍然可以輕鬆閱讀。只需將單引號和分號移至下一行,就在「dbname」之前 – landons