我有一个表numbers
,其中包含3列id
,number
和ts
我想随机选择其中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():绑定变量数与...中预准备语句中的字段数不匹配
答案 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>';
}