Php 当数据库查询返回无/空结果时,Foreach循环中断
当查询不返回任何结果时,我有一个Php 当数据库查询返回无/空结果时,Foreach循环中断,php,mysql,arrays,mysqli,foreach,Php,Mysql,Arrays,Mysqli,Foreach,当查询不返回任何结果时,我有一个foreach循环来显示来自查询的数据,有时我希望它不显示任何数据,但我得到以下错误: 警告:第29行/home/u913241783/public_html/editmeeting.php中为foreach()提供的参数无效 显示数据的段为: <?php foreach($activities as $k=>$v) { ?> <tr class="table-row"> <td><?php echo
foreach
循环来显示来自查询的数据,有时我希望它不显示任何数据,但我得到以下错误:
警告:第29行/home/u913241783/public_html/editmeeting.php中为foreach()提供的参数无效
显示数据的段为:
<?php
foreach($activities as $k=>$v) {
?>
<tr class="table-row">
<td><?php echo $k+1; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'title', 'activities', 'activityid','<?php echo $activities[$k]["activityid"]; ?>')" onClick="showEdit(this);"><?php echo $activities[$k]["title"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'description','activities','activityid','<?php echo $activities[$k]["activityid"]; ?>')" onClick="showEdit(this);"><?php echo $activities[$k]["description"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'leaders','activities','activityid','<?php echo $activities[$k]["activityid"]; ?>')" onClick="showEdit(this);"><?php echo $activities[$k]["leaders"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'time','activities','activityid','<?php echo $activities[$k]["activityid"]; ?>')" onClick="showEdit(this);"><?php echo $activities[$k]["time"]; ?></td>
</tr>
<?php
}
问题在于您的方法runQuery
,因为如果结果为空,它不会返回任何内容。只需添加一个else实例,其中只返回一个空数组,这样foreach循环就不会运行
function runQuery($query) {
$conn = mysqli_connect($this->host,$this->user,$this->password);
mysqli_select_db($conn, $this->database);
$result = mysqli_query($conn, $query)or die(mysqli_error($conn));
while($row=mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if(!empty($resultset))
return $resultset;
else
return array();
}
此外,我建议您将连接保存到属性中,然后将该属性用作连接变量,例如
function __construct() {
$this->conn = mysqli_connect($this->host,$this->user,$this->password,$this->database) OR die ( mysqli_connect_error() );
//^^^^^^^^^^^
}
然后您可以使用$this->conn
在其他方法中使用它
您可能还想了解一下,它更安全。的输出是什么:print\r($activities)代码>?添加完整的代码。。。设置$activities
变量的地方。当查询没有返回结果时,它不会打印任何内容,当查询确实返回结果时,它会打印结果。请解释下一票,以便我可以改进我的答案!我试图向上投票,但当我按下向上箭头时,它一直说-1。谢谢你的帮助-我也会研究你关于改进我的连接方法的建议。@LauraMorris See:这可能会help@LauraMorris不客气!祝您今天愉快:DNo,只需返回$result
。将fetchmode设置为assoc。它是可遍历的,您可以直接访问它。如果它是空的,就不会有循环。失败时为false,仅返回成功的查询(例如插入操作)时为true。大大降低了复杂性和错误情况,还节省了内存。
function runQuery($query) {
$conn = mysqli_connect($this->host,$this->user,$this->password);
mysqli_select_db($conn, $this->database);
$result = mysqli_query($conn, $query)or die(mysqli_error($conn));
while($row=mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if(!empty($resultset))
return $resultset;
else
return array();
}
function __construct() {
$this->conn = mysqli_connect($this->host,$this->user,$this->password,$this->database) OR die ( mysqli_connect_error() );
//^^^^^^^^^^^
}