【发布时间】:2015-07-21 14:40:52
【问题描述】:
我正在尝试使用以下准备好的语句从 MySQL 数据库中获取一些数据。但我在这里有两个问题:
1- 代码仅返回最后一行的值,但如您所见,我正在使用带有 $stmt->fetch() 的 while 迭代器
while($stmt->fetch());{
echo '<option value="'.$uid.'">'.$name.'</option>';
}
2 - 另一件事是当我尝试在代码 sn-p 2 处使用 if($stmt->num_rows > 0){} 时,我收到 Cant' Find Data 消息!
<?php
$conn = new mysqli('localhost', 'root', '', 'dbmodel');
if ($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
}
$sql = 'SELECT uid, name FROM `single-animals-tbl`';
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($uid,$name);
?>
<select>
<option value="0">Select From The List</option>
<?php
while($stmt->fetch());{
echo '<option value="'.$uid.'">'.$name.'</option>';
}
$stmt->close();
$conn->close();
?>
</select>
sn-p 2 与if($stmt->num_rows > 0){}
<?php
$conn = new mysqli('localhost', 'root', '', 'dbmodel');
if ($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
}
$sql = 'SELECT uid, name FROM `single-animals-tbl`';
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($uid,$name);
if($stmt->num_rows > 0){
?>
<select>
<option value="0">Select From The List</option>
<?php
while($stmt->fetch());{
echo '<option value="'.$uid.'">'.$name.'</option>';
}
}else {
echo "Cant' Find Data";
}
$stmt->close();
$conn->close();
?>
</select>
【问题讨论】:
-
如果 numrows 表示没有行,那么您的查询没有返回任何行...您是否尝试过直接在 mysql shell 中运行该查询?那个或查询以某种方式失败了,因为你没有检查错误,你只是盲目地假设它成功了。
-
@Marc B,感谢您的评论,表格中有绝对的行,而且正如我使用 if 语句所说的那样,我得到了最后一行
-
在
while循环之前有一个;,在else之前还有一个额外的、不必要的右大括号} -
@scott,感谢第一部分,但我在其他部分没有得到不必要的支架!
-
右大括号是必要的,它在
if语句之后关闭块。
标签: php mysqli prepared-statement