mySQLi 选择和更新同时进行



我有一个表格numbers,有 3 列idnumberts

我想随机选择 10 条 ts 为 NULL 的记录来获取它们,同时使用当前时间戳更新它们的ts,以便下一次选择我不会得到相同的结果,并知道何时选择了每个number

$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((:绑定变量的数量与预准备语句中的字段数不匹配...

只需使用此查询

$query = 'UPDATE numbers SET ts = " . $ts . " WHERE number IN (SELECT number FROM numbers WHERE
ts IS NULL ORDER BY RAND() LIMIT 10)';

修改:-
我只是删除了额外的选择语句和正确的引号

我找到了它,更新,然后选择更新的行,其中 ts = $ts

$ts = time();
$query = 'UPDATE numbers SET ts = ' . $ts . ' WHERE ts IS NULL ORDER BY RAND() LIMIT 10';
if (!$stmt = $mysqli->prepare($query)) {
echo $mysqli->error;
}
$stmt->execute();
$stmt->close();
$query = 'SELECT number FROM numbers WHERE ts = ' . $ts . ' ORDER BY RAND()';
if (!$stmt = $mysqli->prepare($query)) {
echo $mysqli->error;
}
$stmt->execute();
$stmt->bind_result($number);
$stmt->store_result();
while ($stmt->fetch()) {
echo $number . '<br>';
}

最新更新