php - mySQLi 同时选择和更新

标签 php mysql 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() 因为没有外部输入。

现在,这个查询返回

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in...

最佳答案

只需使用这个查询

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

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

关于php - mySQLi 同时选择和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346270/

相关文章:

php - "Cannot use string offset as an array"错误

php - mysqli_query 和 mysqli_real_query 的区别

php mysqli 删除重复的行但具有不同的 id?

javascript - 将 MySQL 的两行放入 PHP 数组中

php - 为什么无法向 MySQL 数据库插入记录?

php - 第一个数据库结构请帮忙

php - 如何在 Cpanel 中使用 Cron 处理发送电子邮件限制?

php - 无法让 php 设置 session

PHP:将变量添加到 json_decode 中

mysql - mysql 语句中的 ORDER BY CASE