2015-06-20 31 views
0

我不知道它是否是重複的?在php中使用implode變量選擇查詢時遇到麻煩?

這裏是我嘗試:

<?php 
    session_start(); 
    include('db.php'); 
    $valid_data=$_POST['data']; 
    if(isset($_POST['data'])) 
    { 
    $list = isset($_SESSION['strtpnt1']) ? $_SESSION['strtpnt1'] : array(); 
    $_SESSION['strtpnt1'][] =$valid_data; 
    $a=implode(',',$_SESSION['strtpnt1']); 
    } 
    ?> 

當我使用了$ _SESSION [ 'strtpnt1'] print_r的我可以看到這樣的:

 array (size=5) 
    0 => string 'trivandrum' (length=10) 
    1 => string 'kochi' (length=5) 
    2 => string 'nagercoil' (length=9) 
    3 => string 'thrissur' (length=8) 

我發現什麼不妥

當我呼應了內爆變量i找到這樣的值:

 trivandrum,kochi,nagercoil,thrissur 

當我測試了wampserver的phpmyadmin的SQL中的內爆的數據這樣我能得到一個錯誤信息:

select start from tbl_place where start NOT IN(trivandrum,kochi,nagercoil,thrissur) 

的錯誤信息是:

 Unknown column 'trivandrum' in 'where clause' 

但當字符串值傳遞的查詢工作即「特里凡得琅」,「高知」等

我不知道什麼是錯我的查詢......這裏是查詢部分

$sql21 = "select start from tbl_place where start NOT IN('".$a."')"; 
+0

使用準備好的語句 – Sherlock

+0

你的意思是PDO ...我不知道那些... –

+0

我有同樣的問題之前,從變量傳遞值,準備好的語句解決我的問題 – Sherlock

回答

0

現在你可以嘗試這個,但準備好的聲明是最好的。您可以使用PDO或MYSQLi。它不適用於您,因爲NOT IN需要列表單獨引用並用逗號分隔。

$a=$_SESSION['strtpnt1']; 
    $new_a= "'" . implode("','", $a) . "'"; 
    $sql21 = "select start from tbl_place where 
start NOT IN($new_a)"; 

類似的想法 :Can I bind an array to an IN() condition?

Proper format for PDO and MySQL IN/NOT IN queries

+0

是的,它的工作... thnks爲我節省了很多時間,並花時間在它... –

+0

我可以問你一個問題嗎? –

+0

很高興它適合你。祝你好運,你可以問問題嗎?這就是爲什麼我們在SO –

0

您的參數$a值存在錯誤,IN()中的所有值應以逗號分隔並用逗號分隔。

更改您的代碼像下面:

$a=implode("','",$_SESSION['strtpnt1']); // ',' => "','" 

$sql21 = "select start from tbl_place where start NOT IN('".$a."');";// no change 

// NOW the SQL query will became: select start from tbl_place where start NOT IN('trivandrum','kochi','nagercoil','thrissur'); 

現在,它應該工作。

+0

thnkü...爲你的時間花在它... –

+0

@RanjithR:你歡迎:)。你可以問我一個問題...... –

0

$ sql21 = 「選擇tbl_place開始凡在啓動NOT( '」 $ A。 「')」;

將查詢像這樣:

$ sql21 = 「選擇從tbl_place開始凡在啓動NOT( '特里凡得琅,高知,納蓋科伊爾,特里蘇爾')」;

這將把整個字符串

你在傳遞變量 $ A =破滅做( 「 ''」,$ _ SESSION [ 'strtpnt1']);