2014-07-10 53 views
0

如何重構此函數以處理每個字母(a到z)我不想爲每個字母重新編寫查詢。重構字母通配符語句

顯示HTML:

<div class="questionWrapper"> 
    <div class="question"> 
    <h3>A</h3> 
    <?php foreach ($categoryA as $category) : ?> 
     <p class="view"><?= $category['category']; ?></p> 
    <?php endforeach; ?> 
    </div> 
</div> 

查詢例如:

$categoryA = query('SELECT * FROM category WHERE category LIKE "A%"', 
    array('category' => ['category']), 
    $conn); 

$categoryB = query('SELECT * FROM category WHERE category LIKE "B%"', 
    array('category' => ['category']), 
    $conn); 

功能:

function query($query, $bindings, $conn) 
{ 
    $stmt = $conn->prepare($query); 
    $stmt->execute($bindings); 
    return $stmt; 
} 
+0

使用for循環,因爲您正在操作。你在正確的軌道上,只是爲了循環字母表,如果你使用a-z(definitelY)。 'foreach(range('a','z')as $ i){if($ string == $ i){0} {0} } } '然後,對於您的查詢:...「WHERE category LIKE'」。$ i。「%'」;在你的for循環中。 – user1947561

+0

如果您經常這樣做,您可能需要添加一個'category_first_letter'列或可正確編入索引的類別。另外,當你明確地嘗試時,爲什麼不在查詢中使用佔位符? '類別LIKE:category'。 – tadman

+0

您是否指一個查詢中的所有類別結果?也不知道$綁定在那裏做什麼,因爲你的查詢傳遞字符串文字,id也改變你的函數查詢輸入順序($ conn,$ query,$ bindings = array()) – ArtisticPhoenix

回答

0

我固定它FO r您要使用佔位符:

$category = query('SELECT * FROM category WHERE category LIKE :category', 
    array(':category' => '%'.$letter.'%'), 
    $conn); 
+2

這是什麼?你能否解釋一下,我不知道你在這裏做什麼。 – ArtisticPhoenix

+0

您的答案顯示在低質量帖子審閱隊列中。請考慮擴展它以添加關於您的代碼正在執行的操作和原因的解釋。 – azurefrog

+0

對不起,我很忙,我現在更新它 – meda