好的,
我不知道到底是什么问题。因此,我决定将其发布在这里与您讨论。
问题是,当我在 PDO execute(array(implode(",",$imploded))));
中使用php implode函数时,它不起作用
当我在选择语句中使用php implode函数“具有相同变量的相同函数”时,它可以正常工作!
我怀疑在语句中使用它是否会成为 SQL注入的机会。
这是我的完整代码:
$exCat = explode(",", $article['Category']);
$getCats = $con->prepare("SELECT * FROM `Categories` WHERE `ID` IN (?)");
if (is_array($exCat)) {
$getCats->execute(array(implode(",", $exCat))); /* This Is only displaying the first element */
} else {;
$getCats->execute(array($exCat));
}
$getCATS = $getCats->fetchAll();
这对我很好。但是,我怀疑在语句中使用它是否会成为 SQL注入的机会。
$exCat = explode(",", $article['Category']);
$anotherStmt = $con->prepare("SELECT * FROM `Categories` WHERE `ID` IN (" . implode(",", $exCat) . ")"); /* This Works fine */
$anotherStmt->execute();
$anotherCATS = $anotherStmt->fetchAll();
答案 0 :(得分:2)
explode
在每个实例中都返回一个数组,因此不需要is_array
。
您需要为每个要绑定的值使用一个占位符。我会使用str_repeat
和rtrim
来生成您的占位符,然后将展开的数组传递给execute。
$exCat = explode(",", 'non commaed list, commaed');
$placeholders = rtrim(str_repeat('?,', count($exCat)), ', ');
$getCats = $con->prepare("SELECT * FROM `Categories` WHERE `ID` IN ({$placeholders})");
$getCats->execute($exCat);