使用JSON将Javascript数组传递给PHP数组,使用PHP数组查询mysql

时间:2014-01-15 18:31:25

标签: javascript php mysql json

我有一个看起来像这样的javascript数组,21,22,22,22,23,23,23,26,27,27等我需要把它变成一个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是资源,布尔值在......中给出”我可以'为了我的生活,弄清楚如何将这个阵列变成我可以使用的格式,请帮忙!

1 个答案:

答案 0 :(得分: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注入攻击,但它至少适用于非恶意数字数据。