2014-02-07 19 views
0

返回關聯數組這是我會怎樣正常運行與現在$row[]可以用來表示環路內數據庫信息從功能

 $query = "SELECT * from courses ORDER BY id DESC LIMIT 4"; 
     $stmt = $db->prepare($query); 
     $stmt->execute(); 

     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { } 

一個循環。

我的問題是,我將利用這個查詢很多單獨的while循環。但是,我不希望每次需要時都要完成此聲明,所以我希望函數能夠引用任何所需的變量。

例如,我試了一下。

function retrieve_assoc_array_limit4($table) { 
    $user = '***'; 
    $pass = '***'; 
    $db = new PDO('mysql:host=localhost;dbname=***', $user, $pass); 

    $query = ("SELECT * FROM ? ORDER BY id DESC LIMIT 4"); 
     $stmt = $db->prepare($query); 
     $stmt->bindValue(?, $table); 
     $stmt->execute(); 

    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    return $row; 
} 

但是,當試圖同時它獲得相同信息whiled的無限量的回報。

while($row = retrieve_assoc_array_limit4($table_name)) { 
    exho $data; 
} 

我的問題是如何在邏輯上使用的第一個代碼的函數,這樣我可以在相同的使用它,而無情地寫出了聲明全文。

調用使用fetchall()而不是fetch()方法:

+0

如果您使用PHP5.5或更高版本,您可能需要考慮生成器;但考慮編寫一個通用函數,其中限制作爲參數傳遞,而不是針對您要使用的每個不同限制單獨命名的函數。 –

+0

5.4.12是我正在使用的版本。 –

+0

請注意,您__無法綁定表名或列名 –

回答

0

許多這樣做,以小的變化使用你的代碼的方式

function retrieve_assoc_array_limit4($table) { 
    $user = '***'; 
    $pass = '***'; 
    $db = new PDO('mysql:host=localhost;dbname=***', $user, $pass); 

    $query = ("SELECT * FROM ? ORDER BY id DESC LIMIT 4"); 
    $stmt = $db->prepare($query); 
    $stmt->bindValue(?, $table); 
    $stmt->execute(); 

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    return $rows; 
} 

然後調用你的函數,做了一段時間或的foreach:

$rows = retrieve_assoc_array_limit4($table_name); 
foreach($rows as $row){ 
    //do your stuff 
} 
+0

感謝您的迅速反應,這工作出色。現在我只需要學習如何變換表名。再次感謝。 –