2017-12-22 4 views
1

私の質問はデータベースからデータを取得することですが、空の配列を表示することです。 私はPDOによってDBを接続しています。そうでないと、コードで見ることができます。提案コードでは大きな助けになるでしょう。空の配列を返すデータベースからデータを取得するとき

try{ 
    $tododb = new PDO('mysql:host = localhost;dbname = mytodo;charset=utf8','root',''); //Connect to the db 
    $statement = $tododb->prepare('select * from todos'); 
    $statement->execute(); 
    var_dump($statement->fetchAll(PDO::FETCH_OBJ)); 
} 
catch(PDOException $e){ 
    echo 'Exception -> '; 
    var_dump($e->getMessage()); 
    die(); 
} 
+0

としては、あなたのコードは何も問題はありません告げ周りのスペースを削除する必要がありますが、表が空です。 – halojoy

+0

テーブルに実際にデータが含まれていることを確認できますか?コードは私にとってはうまくいくようです。 –

答えて

0

一般に、PDOStatement:fetchAll()は、クエリがデータを返さなかった場合に空の配列を返します。

これは、todosテーブルが空であることを意味します。

しかし、あなたのケースでは、PDO資格情報の不正確さとエラー報告の不十分です。あなたは、データベースエラーの場合に例外をスローするようにPDOに指示しませんでした。

パラメータのうち、you should never ever "decorate" themは空白またはその他の不要なものを追加します。

エラー報告の際には、常にPDOをExceptuionモードにして、手がかりを与えることができます。が、あなたの接続に失敗することができる他に何

$options = [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, 
    PDO::ATTR_EMULATE_PREPARES => false, 
]; 

$tododb = new PDO('mysql:host=localhost;dbname=mytodo;charset=utf8','root','', $options); 
$statement = $tododb->prepare('select * from todos'); 
$statement->execute(); 
var_dump($statement->fetchAll()); 
+0

todosテーブルは空ではありません:/ –

+0

ありがとうBro It Work –

+0

私はあなたが複製として閉じた[この質問](https://stackoverflow.com/q/47989346/4932070)を読んだら、データベース、フェッチしません。あなたがリンクしている質問は、フェッチに関するものです。 –

1

わからない、あなたは「=」

$tododb = new PDO('mysql:host=localhost;dbname=mytodo;charset=utf8','root',''); //Connect to the db 
+0

あなたは正しいですが、それは十分ではありません –

+0

私はスペースを削除しました –

関連する問題