我有一个卖家的小型MySQL数据库,其中有一个表,其中每个卖家都有一个自动增量主键(并且没有任何其他唯一键属性)。现在我想从php脚本中检索每个卖家数据
// Nothing wrong with this code
$stmt = $this->conn->prepare("SELECT * FROM seller WHERE id= ? LIMIT 1");
$stmt->bind_param("i", $ud);
$stmt->execute();
$result = $stmt->get_result();
但是..要使用此查询检索数据,我需要拥有主键(即卖家的自动增量ID)。我怎么知道插入记录的主键是什么?
答案 0 :(得分:2)
您可以从自己的数据中获取ID。例如,假设您有一个列出Widget记录的页面。该页面上的数据库查询可能类似于:
SELECT id,name FROM widgets
然后你将循环显示输出。在此输出中,您可能有一个链接,例如:
echo '<a href="edit.php?id=' . $row['id'] . '">Edit</a>";
会输出类似的内容:
<a href="edit.php?id=123">Edit</a>
点击该链接后,您的浏览器会转到edit.php
,其中包含查询字符串数据id=123
。因此,在那个页面上,您可以获得该查询字符串值:
$_GET['id']
该值将是您要显示的特定记录的ID。将其用作查询中的参数:
SELECT * FROM widgets WHERE id=?
或者,在您的特定代码中,这是您传递给函数的值:
getUserData($_GET['id'])
无论您如何设计,重点是您从数据中获取ID。你不需要直观地知道它们是什么。
答案 1 :(得分:1)
当您尝试根据auto_increment id属性从MySQL服务器检索卖方数据时。我假设你最初没有意识到表格中的任何细节。
这可以使用PHP来处理,最初检索表中的所有ID,以及部分识别属性(如卖家名称),然后使用所选ID获取所需卖家的所有详细信息。
if(!$con) die();
function fetchId(){
$result = mysqli_query($con,"SELECT id, name FROM seller");
if($result && mysqli_num_rows($result)>0){
while($row = mysqli_fetch_assoc($result)){
echo "ID: ".$row["id"]." NAME: ".$row["name"];
retrieveData($row["id"]);
}
}
}
function retrieveData($id){
$result = mysqli_query($con,"SELECT * FROM seller WHERE id=".mysqli_real_escape_string($con,$id));
if($result && mysqli_num_rows($result)==1){
$row = mysqli_fetch_assoc($result)
print_r($row);
}
}
mysqli_close($con);
在需要检索数据时,对主键之类的属性使用auto_increment并不是一种错误的方法,但是在使用它可以单独访问所需行之前,需要预取一些包含该键的部分行。 / p>
答案 2 :(得分:0)
insert_id
属性救了我。
现在就在我的insert语句之后,我可以得到表的最后一个插入主键 -
$stmt->execute();
$sid = $stmt->insert_id;
这相当于mysql中的LAST_INSERT_ID()
函数。确保在插入表格行之后在同一会话中使用它。否则,它返回一个空集。