mySQLi同时选择和更新

时间:2017-07-27 09:11:31

标签: php mysql mysqli

我有一个表numbers,其中包含3列idnumberts

我想随机选择其中ts为NULL的10条记录来获取它们,同时用当前时间戳更新它们的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():绑定变量数与...中预准备语句中的字段数不匹配

2 个答案:

答案 0 :(得分:1)

只需使用此查询

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

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

答案 1 :(得分:0)

我找到了,更新,然后选择更新的行,其中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>';
}