我现在已经搜索了大约3个小时,我发现很多人都有类似的错误,但我还没有找到解决方法来解决这个问题。我看到很多人回答说“你的查询必须返回错误”,但这没有用。我现在只使用mysql和php大约一个星期了,所以我非常喜欢这个。
我把$ count变量放在那里是为了查看我的查询是否会返回正确的行数,而且确实如此,但是while循环给了我错误。如果有帮助的话,我的表中当前有两行。总共有3列(id,User1,User2)。
在对数组中存储多行进行大量搜索之后,所有响应都说使用了while循环,因为fetch_assoc()一次只返回1行。
有人可以告诉我如何修复此代码,或者我可以用什么代码将多行mysql搜索加载到数组中?
$i = 0;
$stmt1 = $this->conn->prepare("SELECT * FROM friends WHERE User1 = ? OR User2 = ?");
$stmt1->bind_param("ss", $myuid, $myuid);
if ($stmt1->execute()) {
$stmt1->store_result();
$count = $stmt1->num_rows;
while(($row = $stmt1->get_result()->fetch_assoc()) !== FALSE){
if ($row['User1'] == $myuid) {
$friends[$i]= $row['User2'];
$i++;
} else if ($row['User2'] == $myuid){
$friends[$i] = $row['User1'];
$i++;
}
}
$stmt1->close();
答案 0 :(得分:2)
我终于可以让它上班了。 @bio_sprite - 感谢绑定结果的提示。这是我使用的代码:
$friends = array();
$i = 0;
$stmt1 = $this->conn->prepare("SELECT User1, User2 FROM friends WHERE User1 = ? OR User2 = ?");
$stmt1->bind_param("ss", $myuid, $myuid);
if ($stmt1->execute()) {
$stmt1->bind_result($User1, $User2);
while($stmt1->fetch()){
if ($User1 != $myuid) {
$friends[$i]= $User1;
$i++;
} else if ($User2 != $myuid){
$friends[$i]= $User2;
$i++;
}
}
$stmt1->close();
return $friends;
答案 1 :(得分:1)
尝试使用fetch()
获取查询结果
$i = 0;
$stmt1 = $this->conn->prepare("SELECT * FROM friends WHERE User1 = ? OR User2 = ?");
$stmt1->bind_param("ss", $myuid, $myuid);
if ($stmt1->execute()) {
$count = $stmt1->rowCount();;
while($row = $stmt1->fetch()){ // you can also try $result = $sth->fetchAll(); for getting all the result
if ($row['User1'] == $myuid) {
$friends[$i]= $row['User2'];
$i++;
} else if ($row['User2'] == $myuid){
$friends[$i] = $row['User1'];
$i++;
}
}
$stmt1->close();
另外,对于获取计数rowCount()
,将为您提供获取的行数。