现在有数组是: $arr = array(1,2,3,4,5....)
我可以使用 ... WHERE meta_id IN (1,2,3,4,5....) 来获取 mysql 数据,
但是如何将数字替换为 $arr?
您可以使用JOIN
$array = array('1', '2', '3');
$arr_ID = join(',', $array);
$sql = "SELECT * FROM tableName WHERE id IN ($arr_ID)";
快速回答:
$arr = array(1,2,3,4,5);
$string = implode(',', $arr);
$sql = sprintf('SELECT `foo` FROM `table` WHERE `meta_id` IN (%s)', $string);
更长的答案:
您应该考虑在查询中使用参数,以避免 SQL 注入。在您的示例中,您确实有一个“硬编码”数组,但是如果要在IN
子句中使用用户输入......好吧,那么您最好的选择是使用参数(如 php.net 上所示):
$arr = array(1, 2, 3, 4, 5);
$questionMarkArray = array();
foreach($arr as $item) {
$questionMarkArray[] = '?';
}
$string = implode(',', $questionMarkArray);
$sql = sprintf('SELECT `foo` FROM `table` WHERE `meta_id` IN (%s)', $string);
$statement = $dbh->prepare($sql);
$statement->execute($arr);
$results = $statement->fetchAll();
这样,您将摆脱 SQL 注入之类的可能性。
此外,由于我已经有一两年没有真正写过 php,因此可能有更好的方法来创建问号(但是,手动附加到字符串是更丑陋的 imo)。