2014-01-15 38 views
0

我有一個javascript數組,看起來像這樣,21,22,22,22,23,23,23,26,27,27等我需要將它放入一個php數組中,然後使用該數組來查詢mysql以搜索數組中的值。傳遞Javascript數組到PHP數組使用JSON,使用PHP數組來查詢mysql

我在這裏是我的代碼,我用它來重新加載一個元素與發佈轉換數組。

$(function() { 
    $("#deckRefresh").click(function(evt) { 
     var teset = convertArray(deck_array); 
     $("#deckTest").load("core/m.deckcontainer.php?cid="+teset) 
     evt.preventDefault(); 
    }) 
}) 

這裏是我打電話給數組轉換成JavaScript函數:

function convertArray(array){ 
var teset = JSON.stringify(array); 
return teset; 
} 

轉換可能是這個樣子的數組:22,22,22,22,23,23,23 ,23,26,27,28,28 返回的JSON $ _post值爲:[22,22,22,22,23,23,23,23,26,27,28,28] 搜索堆棧後回答這是我的數組和查詢MySQL代碼看起來像:

if($_GET){ 

$queryTest = str_replace("[","",$_GET['cid']); 
$queryTest1 = str_replace("]","",$queryTest); 
$esplodCId = explode(',', $queryTest1); 


foreach ($esplodCId as $key => $var){ 
$esplodCId[$key] = (int)$var; 
} 

$sql = mysql_query("SELECT * FROM cards WHERE cid IN($esplodCId)"); 
while ($row = mysql_fetch_assoc($sql)){ 
echo "{$row['img']}<br/>"; 
} 
} 

我現在想要看到的僅僅是來自mysql的img信息,當我運行這個時,我得到了,「警告:mysql_fetch_assoc()期望參數1是資源,布爾在給出....」我不能對於我來說,弄清楚如何將這個數組轉換成我可以使用的格式,請大家幫忙!

+0

'deck_array.toString();'而不是'convertArray()' – sbeliv01

+1

您正在使用PHP處理json。 **別**。有[json_decode()](http://php.net/json_decode)爲你做到這一點。 –

+0

@Marc B - 它看起來並不像JSON首先被傳遞。只是'cid'參數的逗號分隔值。 – sbeliv01

回答

0
$esplodCId = explode(',', $queryTest1); 
^^^^^^^^^^--- explode returns an array 

$sql = mysql_query("SELECT * FROM cards WHERE cid IN($esplodCId)"); 
       using an array in a string context---^^^^^^^^^^ 

您的查詢居然是:

SELECT * FROM cards WHERE cid IN(Array) 

因爲在字符串上下文中使用數組是字面上的字Array

如果您的代碼是原樣,那麼您最好簡單地從原始json字符串中去除[],然後將剩餘的CSV字符串填充到查詢中。

除此之外,你容易受到SQL injection attacks

,你應該在PHP是什麼更多的東西一樣:

$json = $_GET['cid']; 
$ids = json_decode($json); 

$csv = implode(',', $ids); 

$sql = "SELECT .... WHERE cid IN ($csv)"; 

這是STILL容易受到SQL注入攻擊,但它會至少適用於非敵對數字數據。