我有一个充满随机内容项ID的数组。我需要运行mysql查询(数组中的ID在WHERE子句中),并使用数组中的每个ID并按照它们在所述数组中出现的顺序进行操作。我该怎么做?
对于数组中的每个ID,这将是一个UPDATE查询。
与几乎所有“如何在PHP中执行SQL”问题一样,您 实际上 应该使用准备好的语句。这并不难:
$ids = array(2, 4, 6, 8);
// prepare an SQL statement with a single parameter placeholder
$sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?";
$stmt = $mysqli->prepare($sql);
// bind a different value to the placeholder with each execution
for ($i = 0; $i < count($ids); $i++)
{
$stmt->bind_param("i", $ids[$i]);
$stmt->execute();
echo "Updated record ID: $id\n";
}
// done
$stmt->close();
或者,您可以这样做:
$ids = array(2, 4, 6, 8);
// prepare an SQL statement with multiple parameter placeholders
$params = implode(",", array_fill(0, count($ids), "?"));
$sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)";
$stmt = $mysqli->prepare($sql);
// dynamic call of mysqli_stmt::bind_param hard-coded eqivalent
$types = str_repeat("i", count($ids)); // "iiii"
$args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8]
call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8)
// execute the query for all input values in one step
$stmt->execute();
// done
$stmt->close();
echo "Updated record IDs: " . implode("," $ids) ."\n";
// ----------------------------------------------------------------------------------
// helper function to turn an array of values into an array of value references
// necessary because mysqli_stmt::bind_param needs value refereces for no good reason
function ref($arr) {
$refs = array();
foreach ($arr as $key => $val) $refs[$key] = &$arr[$key];
return $refs;
}
根据需要为其他字段添加更多参数占位符。
选哪一个?
第一种变体可迭代处理可变数量的记录,从而多次访问数据库。这对于UPDATE和INSERT操作最有用。
第二种变体也适用于可变数量的记录,但是它只命中一次数据库。这比迭代方法高效得多,显然,您只能对所有受影响的记录执行相同的操作。这对于SELECT和DELETE操作,或者要更新具有相同数据的多条记录时最有用。
为什么要准备陈述?
execute()
,因此当重复使用时,需要较少的数据通过网络。在更长的循环中,使用准备好的语句和发送纯SQL之间的执行时间差异将变得明显。
问题内容: 我在main中调用了swap方法,但它没有任何改变。我究竟做错了什么? 我的代码产生 以正常的升序排列,我希望它交换第4个和第15个元素。 问题答案: 移动方法调用:- 在您的for循环之外。因为,如果您的循环运行次数,则不会影响阵列。 另外,您需要先初始化数组,然后才能实际交换元素。调用之前需要执行的操作。
问题内容: 我见过类似的问题,但没有一个提供我所要的答案,因此,如果这被认为是重复的,我在此致歉。我正在尝试将数组{1,2,3}和{4,5,6}合并为{1,2,3,4,5,6}。我做错了什么?我是java的新手。抱歉,问题很愚蠢。 问题答案: 代替 您需要调用merge方法,并将结果分配给数组,例如: 您的for循环也应该是:
问题内容: 我很难解决这个问题的解决方案。我正在尝试用Java开发一个程序,该程序需要一个数字,例如321,并找到数字的总和,在这种情况下为3 + 2 + 1 =6。我需要任何三个数字的所有数字将它们加在一起,并使用%剩余符号存储该值。这让我感到困惑,我想感谢任何人的想法。 问题答案: 输出量
本文向大家介绍MongoDB查询如何从集合中删除整个数组,包括了MongoDB查询如何从集合中删除整个数组的使用技巧和注意事项,需要的朋友参考一下 要从集合中删除整个数组,请在MongoDB中使用$unset。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 这是从集合中删除整个数组的查询- 在find()方法的帮助下显示集合中的所有文档- 这将
问题内容: 如何在PHP中使用64位整数? 似乎它不是由配置文件提供的,而是可能是一个编译时选项,并且取决于平台。 问题答案: 本机64位整数需要64位硬件和64位版本的PHP。 在32位硬件上: 在64位硬件上:
我是编程新手,目前使用JavaFX作为个人组织工具。我在这里展示了一个按钮(称为book)和阶段(称为bookStages)的数组列表,一个名为addBook的VBox,以及一个名为bookButtonCount的Int设置为0。 第一个按钮将“书籍”数组列表中的一个按钮添加到VBox。vbox中的按钮应该从舞台数组列表中打开一个阶段。您应该能够多次触发该按钮,每次向vbox添加一个新按钮并将该按