2014-09-23 93 views
1

我想不過,我得到這個錯誤呼應從用戶定義的表($table_name
回聲從MySQL列的所有值

$pdo = new PDO('mysql:dbname=db', 'user', 'pass'); 

$stmt2 = $pdo->query("SELECT comment FROM '$table_name'"); 

    if ($stmt2->rowCount() > 0) { 

     $comments = $stmt2->fetchAll(PDO::FETCH_NUM); 

     foreach ($comments as $comment) { 

      $comm = $comment[0]; 
      echo $comm; 

     } 
    } 


「註釋」的所有值:

Fatal error: Call to a member function rowCount() on a non-object in /FilePath/file.php on line 3

+3

您的表名周圍有單引號。刪除它們。這是一個印刷錯誤,我正在投票結束。 – 2014-09-23 02:47:00

+2

在連接打開後立即添加'$ pdo-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);'。這將表明發現錯誤。在打開'<?php'標籤後立即在文件頂部添加錯誤報告 'error_reporting(E_ALL); ini_set('display_errors',1);' - 不值得爲這個答案。一旦你看到錯誤彈出窗口,你可以解決這個問題。 – 2014-09-23 02:47:35

回答

1

沒有標識符引號是反引號不是單引號。

 
`backticks` 

// not 'table_name' 
    ^single quotes 

只要拿出那個引號。它會工作得很好。

$stmt2 = $pdo->query("SELECT comment FROM $table_name"); 

除非像@Fred說,你的表名是MySQL reserved word或有空格或連字符(或任何其他字符SQL會不同意),那麼你需要他們。

與往常一樣,打開錯誤報告。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // below the pdo connection 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
// first lines of the file 
+1

如果OP的表名稱被稱爲「keys」或其他可能的保留字,那麼最好用「反引號」回答。讓我們假設*更壞的情況下*) – 2014-09-23 02:51:59

+0

我也注意到OP缺少mysql:host =' – 2014-09-23 03:06:34

+0

@ Fred-ii-這似乎工作正常,好吧,在我的環境中,實際上我沒有意識到,直到我測試它不久前當省略dsn – Ghost 2014-09-23 03:07:04