是否有方法以与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,但这不是问题。有什么想法吗?
答案 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)
这是我的解决方案: