1

现在有数组是: $arr = array(1,2,3,4,5....)

我可以使用 ... WHERE meta_id IN (1,2,3,4,5....) 来获取 mysql 数据,

但是如何将数字替换为 $arr?

4

2 回答 2

2

您可以使用JOIN

$array = array('1', '2', '3');
$arr_ID = join(',', $array);  
$sql = "SELECT * FROM tableName WHERE id IN ($arr_ID)";
于 2013-03-31T11:35:46.520 回答
0

快速回答:

$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)。

于 2013-03-31T11:37:20.043 回答