我想循环遍历数据库中的所有行并将它们显示给用户,但我只是在输出中获得第一行。
这是我的代码::
查询功能:
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo ->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach ($params as $param) {
$this->_query->bindValue($x,$param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count =$this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
public function results() {
return $this->_results;
}
我的查询:
$search = DB::getInstance()->query("SELECT * FROM staff_info WHERE staff_id = ?",array(
Input::get('staff_id')));
if($search->count()){
if($search) {
$search_result = $search->results();
foreach ($search_result as $val) {
$fname = $val->fname;
$surname = $val->surname;
$street = $val->street;
echo '<div class="table-responsive table-bordered">
<table class="table">
<tr>
<td><a href="index.php?ad=profile">'.$fname.'</a></td>
<td><a href="index.php?ad=profile">'.$surname.'</td>
<td><a href="index.php?ad=profile">'.$street.'</td>
</tr>
</table>
</div>';
}
}
问题是 - 即使数据库中还有更多其他行,我也只获得第一行。任何想法为什么会发生这种情况?
答案 0 :(得分:0)
你错过了下划线。
在查询功能中,您将输出存储在$this->_results
中。您需要在循环之前更正变量名称。 $search->_results
。
答案 1 :(得分:0)
使用PDO方法prepare(),执行()&amp; fetchAll()或fetch()。请注意,我已调用我的方法findAll()
,以免将其与PDO fetchAll()
混淆。以下代码基于我的用法。
在课堂上
对于所有结果
public function findAll($sql,$param) {
$query = $this->dbh->prepare($sql);
if(is_array($param)){
$query->execute($param);//1 parameter
}else {
$query->execute(array($param));// >1 parameters
}
$rows = $query->fetchAll();
if($rows){
return $rows;
}
}
}
一个结果
public function findOne($sql,$param) {
$query = $this->dbh->prepare($sql);
if(is_array($param)){
$query->execute($param);//1 parameter
}else {
$query->execute(array($param));// >1 parameters
}
$row = $query->fetch();
if($row){
return $row;
}
}
}
用法
$params=array(100,"AK");
$sql1 = "SELECT * FROM users WHERE id < ? AND state = ?";
$rows = $dao->findAll($sql,$params);
foreach($rows as $row){//Remove for 1 result
echo $row['firstname'];
etc.....
如果您只想查找一条记录,则可以在新方法中将fetchAll()
替换为fetch()
,而只使用foreach()