我有一个整数数组,我如何在mysql查询(在php)中使用每一个?

我有一个包含随机内容项ID的数组。我需要运行一个mysql查询(数组中的id在WHERE子句中),按照它们在数组中出现的顺序使用数组中的每个ID。我该怎么做?

这将是一个UPDATE查询,为数组中的每个单独的ID。

与几乎所有的“如何从PHP内部的SQL”问题 – 你真的应该使用准备的语句。这不是很难:

$ids  = array(2, 4, 6, 8);
$sql  = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?";
$stmt = $mysqli->prepare($sql);
for ($i = 0; $i < count($ids); $i++)
{
    $stmt->bind_param("i", $ids[$i]);
    $stmt->execute();
    echo "Updated record ID: $id\n";
}
$stmt->close();

或者,您可以按照以下方式执行:

$ids    = array(2, 4, 6, 8);
$params = implode(",", array_fill(0, count($ids), "?"));
$sql    = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)";
$stmt   = $mysqli->prepare($sql);

call_user_func_array(array($stmt, 'bindparams'), $ids);
$stmt->execute();
$stmt->close();
echo "Updated record IDs: " . implode("," $ids) ."\n";

但显然,第二个选项将限制您仅使用相同的数据更新所有受影响的记录,而使用第一个选项可以在每个循环迭代中将不同的数据绑定到语句。

调用一个准备好的语句是非常安全的(没有SQL注入可能),并且循环中这样做也更有效率,因为只有参数值被发送到服务器上的execute()而不是整个语句。在更长时间的循环中,这种差异肯定会变得明显。

翻译自:https://stackoverflow.com/questions/330268/i-have-an-array-of-integers-how-do-i-use-each-one-in-a-mysql-query-in-php

转载注明原文:我有一个整数数组,我如何在mysql查询(在php)中使用每一个?