2010-11-29 110 views
0

看來我可以使用PDO連接到我的數據庫,但無法執行任何查詢。例如:PHP&PDO:可以連接到數據庫;似乎無法查詢

private function connect() { 
     try { 
      $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
     } 
      catch (PDOException $e) { 
      die ($e); 
     } 
     print_r($link); 
     $result = $link->query("select * from mt3_users"); 
     var_dump($result); 
     $row = $result->fetch($result); 
     die("Your id is: ".$row["id"]); 
     //$link = mysql_connect($this->sHost, $this->sUser, $this->sPass); 
     if (!$link) { 
      echo "Failed to connect to $this->sHost!"; 
      return false; 
     } 
     return $link; 
} 

這將返回以下:

PDO Object () bool(false) Fatal error: Call to a member function fetch() on a non-object in Database.php on line 32

所以基本上,$鏈接是回來爲PDO對象(我改變了我的用戶名和密碼,以查看是否有異常被抓住了,這是)和PDOConnection :: Query出於某種原因返回null。這是我第一次處理PDO - 我是否在做一些有趣的事情?

+0

代碼風格建議:不要把變量在雙引號中的字符串,但使用單 - 引用字符串和字符串連接來嵌入變量。使代碼更易讀和更快。 此外,如果你想讓一個異常致命,你不必手動捕獲它們並死掉()。 – ThiefMaster 2010-11-29 23:01:03

回答

0

陣列([0] => 00000 [1] => 1046 [2] =>未選擇數據庫)Array()

沒關係,我猜。事實證明,在使用常規MySQL函數進行遷移時,我並沒有設置$ this-> sName($ this-> sName爲null。我驚訝地發現它沒有拋出異常,只有一半)

固定。

但是感謝你們的答案:)

0

最有可能的查詢失敗,你確定表mt3_users的名稱,並且你選擇了正確的數據庫嗎?該錯誤消息表明$result不是一個對象,這是由於查詢中的錯誤。

另外:

$row = $result->fetch($result); 

應該

$row = $result->fetch(); 

,除非你想指定選項fetch(),但你不傳遞對象作爲參數。

0

可以給這一個嘗試

private function connect() { 
try { 
    $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
return $link ; 
} 
catch (PDOException $e) { 
die ($e); 
} 
} 
$pdolink = $this->connect(); 
$rows = $pdolink->query("select * from mt3_users"); 
foreach($rows as $row){ 
    echo("Your id is: ".$row["id"]); 
} 

和如果需要與fetchAll功能粘

private function connect() { 
    try { 
     $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
    return $link ; 
    } 
    catch (PDOException $e) { 
    die ($e); 
    } 
    } 
    $pdolink = $this->connect(); 
    $q = $pdolink->prepare("select * from mt3_users"); 
    $q->exectue(); 
    $rows = $q->fetchAll(); 
    var_dump($rows); 
    foreach($rows as $row){ 
     echo("Your id is: ".$row["id"]); 
    } 
0

爲了得到錯誤在您的查詢:

$result = $link->query(...); 
if($result===FALSE){ 
    print_r($link->errorInfo); 
    exit(); 
} 

// the correct way to fetch one row 
$link->fetch(PDO::FETCH_ASSOC); // or whatever way you want to fetch data