2012-01-04 57 views
1

我想構建一個標籤系統,並且希望在上傳新標籤之前查詢我的標籤表以清除重複標籤。所以我將這些標籤打包在一個展開的數組中,當我去查詢包含數組的表格時,我從Zend收到了很多關於它如何不能將數組轉換爲字符串的錯誤消息。在Zend框架中使用PHP數組MySQL查詢

這是我到目前爲止。

$tags = explode(', ', $_POST['itemTag']); 

foreach($tags as $tag) { 
    $tag_sql[] = '\''.$tag.'\''; 
} 
$tag_where = implode(',',$tag_sql); 

$i = 0; 
while ($i < count($tags)) { 


    $sql = $dbRead->quoteInto("SELECT tagID FROM item_tag WHERE tag IN ($tag_where)"); 
$tag_result = $dbRead->fetchAll($sql); 

    if ($tag_result) { 
     $tag_ID = $tag_result; 
    } 
    else { 
    $data = array ('tag' => $tags[$i]); 
    $dbWrite->insert('item_tag', $data); 
    $tag_ID = $dbWrite->lastInsertId(); } 

$data = array('itemID' => $item_ID, 
       'tagID' => $tag_ID); 

    $dbWrite->insert('item_tag_connection', $data); 
++$i; 
    } 
} 

我還需要它插入標籤的ID號,如果一個是查詢過程中發現到連接表,而且我不確定我是否有代碼的功能,因爲我不能讓過去的陣列查詢問題。

謝謝。

回答

3

讓Zend的報價,使用quoteInto()爲你喜歡的數組:

$dbRead->quoteInto('SELECT tagID FROM item_tag WHERE tag IN (?)', $tags) 
0

試試這個:

$tags = explode(', ', $_POST['itemTag']); 
foreach($tags as $tag) 
{ 
    $sql = $dbRead->quoteInto("SELECT tagID FROM item_tag WHERE tag='$tag'"); 
    $tag_result = $dbRead->fetch($sql); 

    if ($tag_result) { // I'm not sure if you should use this or count($tag_result) > 0 
     $tag_ID = $tag_result['tagID']; 
    } else { 
     $data = array ('tag' => $tag); 
     $dbWrite->insert('item_tag', $data); 
     $tag_ID = $dbWrite->lastInsertId(); 
    } 

    $data = array('itemID' => $item_ID, 
       'tagID' => $tag_ID); 

    $dbWrite->insert('item_tag_connection', $data); 
}