2016-04-12 68 views
3

道歉開放什麼應該被視爲一個非常基本的問題。請注意我已經使用mysql_query方法編碼1000次,因此,我很難做出這個開關,但我終於做到了。從數據庫返回數組結果PDO

我的第一個問題

我的第一個問題來自於簡單地返回select語句

列表

例子:我試圖執行:

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

我看了所以下面問題,並試圖實現沒有成功的答案,

PDO equivalent of mysql_fetch_array

translation mysql_fetch_array to PDO::FETCH_NUM

我現在應該是「最好的之一了2015/16」,書上說的關於上述問題

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']; 
} 

上面的代碼給我的留言,「成功」這樣,我成功地連接到我的數據庫,但該查詢返回以下錯誤:

Invalid argument supplied for foreach() 

我發現它極大地令人沮喪,我不得不通過這樣的長度只是爲了從簡單的select聲明中返回結果,並且正在認真考慮回到舊的方式,現在我已經完成了我的任務,現在我轉向SO社區尋求幫助。任何幫助不勝感激。

+0

'PDO :: query'返回一個[PDOStatement對象](http://php.net/manual/en/class.pdostatement.php),您可以使用它來「獲取」結果。 – apokryfos

+0

@apokryfos好的,但爲什麼我的50美元的書給了我一個不同的例子...只是問? –

+1

'PDOStatement實現Traversable',這意味着您可以通過foreach進行迭代,只要查詢有效。 – apokryfos

回答

2

我很慚愧地發佈這個,但我發現了這個問題。可能它可能在未來幫助某人。

查詢數據庫的代碼很好。

的問題是,在1號線以下:

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

它應該閱讀

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

If statment總是返回echo success即使你不因此連接,使用try/catch

吸取的教訓:總是插入從第1行代碼您的代碼

+0

此外,第二課要學習:不要相信簡單的'if($ db){...}'驗證檢查。 ;) – Paul

+0

確實 - 不要採取快捷方式 –

+1

很奇怪,「新的PDO」沒有導致一個未捕獲的異常,導致整個程序被終止... – deceze