Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当数据库查询返回无/空结果时,Foreach循环中断_Php_Mysql_Arrays_Mysqli_Foreach - Fatal编程技术网

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() );
  //^^^^^^^^^^^
}