我有一个看起来像这样的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是资源,布尔值在......中给出”我可以'为了我的生活,弄清楚如何将这个阵列变成我可以使用的格式,请帮忙!
答案 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注入攻击,但它至少适用于非恶意数字数据。