2017-06-01 87 views
0

我正在嘗試運行一個包含數組的查詢。我崩潰了數組,但我不能使用SQL IN函數,因爲我將使用LIKE函數。所以這是我想離開的解決方案:帶有PDO SQL LIKE查詢的PHP implode查詢

$soort = $_POST['soort']; 

$st = $db->prepare("SELECT * FROM antwoorden_259 WHERE vraag4 LIKE :soort 
        AND vraag3 LIKE :merk 
        AND vraag16 BETWEEN :prijsvan AND :prijstot 
        AND vraag5 BETWEEN :minkm AND :maxkm 
        AND vraag8 BETWEEN :vermogenvan AND :vermogentot 
        AND vraag9 LIKE :brandstof 
        ORDER BY vraag3 ASC LIMIT 5" 
        ); 


$st->bindValue(':soort', implode(" OR ", $soort)); 
$st->bindValue(':merk', "%%"); 
$st->bindValue(':prijsvan', $prijs_particulier_van); 
$st->bindValue(':prijstot', $prijs_particulier_tot); 
$st->bindValue(':minkm', $minkm); 
$st->bindValue(':maxkm', $maxkm); 
$st->bindValue(':vermogenvan', $vermogenvan); 
$st->bindValue(':vermogentot', $vermogentot); 
$st->bindValue(':brandstof', $brandstof); 
$st->execute(); 

對不起爲荷蘭的話,請忽略除綁定值:soort之一。基本上我想要做的是將我的數組$ $ soort分割成像這樣的字符串:卡車或汽車或船等。用戶可以在不同頁面上的複選框中選擇值。

我似乎無法弄清楚爲什麼最終查詢不起作用,implode做它的事情,並且它在我手動嘗試在PHPMyAdmin中使用它時工作。此外,查詢在我選擇1複選框時仍然有效,但它停止工作時,我選擇第二...

任何人都可以幫助我嗎?我可能已經忘了一些事情了。這是漫長的一天!

的HTML:

<li> 
    <input type="checkbox" value="vrachtwagen" id="check-1" class="checked" name="soort[]"> 
    <label for="check-1" class=""> 
     <span class="flt_lt">Vrachtwagen</span> 
     <span class="flt_rt">5</span> 
     <span class="clear"></span> 
    </label> 
</li> 
<li> 
    <input type="checkbox" value="trekker" name="soort[]" id="check-2"> 
    <label for="check-2" class=""> 
     <span class="flt_lt">Trekker</span> 
     <span class="flt_rt">5</span> 
     <span class="clear"></span> 
    </label> 
</li> 
<li> 
    <input type="checkbox" value="oplegger" name="soort[]" id="check-3" class="checked"> 
    <label for="check-3" class=""> 
     <span class="flt_lt">Oplegger</span> 
     <span class="flt_rt">5</span> 
     <span class="clear"></span> 
    </label> 
</li> 
<li> 
    <input type="checkbox" value="vrachtwagen" name="soort[]" id="check-4" class="checked"> 
    <label for="check-4" class=""> 
     <span class="flt_lt">Aanhanger</span> 
     <span class="flt_rt">10</span> 
     <span class="clear"></span> 
    </label> 
</li> 
+0

如果你添加'echo $ st-> errorInfo();'它說什麼? – Jelmergu

+0

p.s.你總是可以將荷蘭語單詞轉換成英文 – Jelmergu

+0

另外,哪些複選框?發佈與問題 – Jelmergu

回答

0

soort參數是越來越插入查詢,像這樣:

SELECT * FROM antwoorden_259 
    WHERE vraag4 LIKE 'trekker OR oplegger' [...] 

如果我正確地收集你的目標,你需要將這些分離出來單獨成所以它們被插入到這樣的查詢中:

SELECT * FROM antwoorden_259 
    WHERE vraag4 LIKE 'trekker' 
    OR vraag4 LIKE 'oplegger' [...] 

當查詢的綁定參數數量可變時,我發現我需要在準備的SQL中使用?使用數字索引的參數。

$st = $db->prepare("SELECT * FROM antwoorden_259 WHERE 
    vraag4 LIKE ? 
    OR vraag4 LIKE ? 
"); 
$st->bindValue(1, $soort[0]); 
$st->bindValue(2, $soort[1]); 

(適應查詢到的參數變量數目已經作爲練習留給讀者。)

如果你的SQL方言支持它,你可以使用一個「喜歡陣列」式操作像PostgreSQL支持:WHERE somecolumn ~~* any(array['%some%', '%someelse']))

+0

Hey ,你的意思是像這樣添加它: $ st-> bindValue(':soort',implode('「或vraag4 LIKE」',$ soort)); 我試過這個,但它什麼都沒有返回.. –

+0

@SebastianBoender不,你仍然把它們全部放到一個參數中。你將無法做到這一點。看修改後的答案。 – amphetamachine

+0

我也這麼想過,但問題是,這個腳本將被AJAX執行onclick。索引數組可以包含1到4個值之間的任何值。它不同的每一次...任何解決方案? –