2016-04-12 6 views
3

非常に基本的な質問と思われるものを開くためのお詫び。私はmysql_queryメソッドを1000回使用してコード化していることに注意してください。スイッチを作るのは本当に難しいですが、やっと私はそれをやっています。db PDOから配列結果を返す

私の第一の問題私の第一の問題は、単純にselect文

例のリストを返すにしてい

:私が実行しようとしています:

$sql="Select *From members"; 
$result = mysql_query($sql); 
while($row = mysql_fetch_array($result)) { 
    $name = $row['name']; 
} 

私はSO以下を読みました回答を成功させようと試みたが、回答を成功させようと試みた。

PDO equivalent of mysql_fetch_array

translation mysql_fetch_array to PDO::FETCH_NUM

私は今「16分の2015のための最高の1」、本は上記の問題

enter image description hereに関する次のことを言うことになってPHP帳で働いています

は再び私は成功せず、ブックからの推薦を試してみました

<?php 
$dsn ='mysql:localhost;dbname:myDB;'; 
$uname = 'root'; 
$pword = ''; 
$db = new PDO($dsn, $uname,$pword); 
if($db){ 
    echo'Success';  
} else { 
    echo'error'; 
} 

$sql="SELECT * from members"; 
$results = $db->query($sql); 
foreach($results as $result) { 
    echo $result['name']; 
} 

上記のコードは私にメッセージ、したがって、「成功」を与える、私は正常に私のDBに接続していますが、クエリは次のエラーを返します。

Invalid argument supplied for foreach() 

私は私が通過していることを非常にイライラそれを見つけていますがそのような長さだけで簡単な結果を返すためにselectステートメントを真剣に私は今まで私の割り当てを完了していた古い方法に戻って検討している、私はそれを正しくするために、 。どんな助けでも大歓迎です。

+0

'PDO :: query'は結果を'フェッチする 'ために使用できる[PDOStatementオブジェクト](http://php.net/manual/en/class.pdostatement.php)を返します。 。 – apokryfos

+0

@apokryfosでも、なぜ私の50ドルの本は、私に別の例を与えているのですか...ただ質問していますか? –

+1

'PDOStatementはTraversableを実装しています '。つまり、クエリがうまくいけば、foreachを使ってiterateすることができます。 – apokryfos

答えて

2

私はこれを投稿して非常に恥ずかしいですが、私は問題を発見しました。可能であれば、将来誰かを助けるかもしれない。

DBにクエリするコードは問題ありません。

問題は、1行目に次のようにある:

$dsn ='mysql:localhost;dbname:myDB;'; 

それはIfなステートメントが常にtry/catch

を使用し、あなたがこのように接続されていない場合でも echo successを返します

$dsn ='mysql:host=localhost;dbname=myDB;'; 

をお読みください

レッスン内容:常にイン1行目のコードを訂正してください

+0

さらに、第2の教訓を学ぶ:単純な 'if($ db){...}'検証チェックを信頼しないでください。 ;) – Paul

+0

実際にはショートカットを取らない –

+1

「新しいPDO」がプログラム全体を殺した未知の例外を引き起こさなかったのは不思議です... – deceze

関連する問題