【发布时间】:2017-07-27 09:11:31
【问题描述】:
我有一张表 numbers 有 3 列 id、number 和 ts
我想随机选择 ts 为 NULL 的 10 条记录来获取它们,同时用当前时间戳更新它们的 ts,以便下一次选择我不会得到相同的结果,并且知道每个 @ 987654326@已被选中。
$ts = time();
$query = 'UPDATE numbers SET ts = ' . $ts . ' WHERE number IN (SELECT number FROM (SELECT number FROM numbers WHERE ts IS NULL ORDER BY RAND() LIMIT 10) AS t)';
if (!$stmt = $mysqli->prepare($query)) {
echo $mysqli->error;
}
$stmt->execute();
$stmt->bind_result($number);
$stmt->store_result();
while ($stmt->fetch()) {
echo $number . '<br>';
}
这里我不需要任何 bind_param() 因为没有外部输入。
现在,这个查询返回
警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句中的字段数量不匹配...
【问题讨论】:
-
UPDATE 查询的结果是 TRUE 或 FALSE,因此没有要绑定的结果
-
你是对的,如何从 SELECT 中获取结果?
-
没有 SELECT,select 是一个子查询,因此只用作主查询来限制主 UPDATE 查询的作用
-
如果您想知道哪些行被更新,您必须将该过程拆分为一个 SELECT 查询和一个 UPDATE 查询,并从 SELECT 查询结果手动构建 IN 列表