PDO获取最后选择的行

时间:2015-05-30 10:36:21

标签: php mysql pdo

是否有方法以与lastInsertId类似的方式获取最后一个选择ID? 例如:

<?php
$stmt = $db->prepare('SELECT * FROM users WHERE user_id = :user_id');
$stmt->bindValue(':user_id', $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_OBJ);
$user_id = $db->lastSelectId('user_id'); // what can I do here?
?>

显然在上面的示例中,我可以简单地使用$ user-&gt; user_id获取最后选择的行ID,但这不是问题。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

如果要从数据库表中选择最后一个插入的行,则无需选择所有行,然后在循环中查找最后一行。此外,user_id应该是主键,在这种情况下,查询应该只返回一行。

如果user_id是自动递增的字段,则您的查询应该与SELECT * FROM users ORDER BY user_id DESC LIMIT 1类似,这将返回具有最大user_id的用户。

我还建议您保存插入用户的时间戳,然后您可以执行ORDER BY date_added DESC LIMIT 1无论user_id的订单如何都可​​以。

答案 1 :(得分:0)

不,除了阅读$user->user_id之外别无他法。没有魔术函数来获取选择的最后一个id。

这可能是因为没有必要,因为select会返回值本身。您已经在问题中显示了阅读ID是多么容易。

答案 2 :(得分:0)

尝试以下 - $ stmt-&GT; INSERT_ID;

参考以下链接 - Using PHP, MySQLi and Prepared Statement, how I return the id of the inserted row?

答案 3 :(得分:0)

如果您正在搜索某个特定用户,请务必使用LIMIT 1

$stmt = $db->prepare('SELECT * FROM users WHERE user_id = :user_id LIMIT 1');
$stmt->bindValue(':user_id', $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
echo $user->user_id;

答案 4 :(得分:0)

这是我的解决方案:

  • 将所需的最后一个SELECT的ID放入$ _SESSION ['name']。
  • 将其作为隐藏输入放入html文件中。
  • 在控制器文件的开头获取它,以便始终对其进行设置并可以使用。
  • 使用lastInsertId();