我正在使用 foreach 浏览一组数据,但是在浏览它时,它会释放为 foreach() 提供的这个 Invalid 参数,并告诉我变量未定义。这是我的代码:
<?php
include 'Models.php';
class Restaurant extends Models{
private $datos;
public function __construct(){
$this->datos=array();
parent::__construct();
}
public function InfoRest(){
session_start();
$id = $_SESSION['usuario']['id_usuario'];
$sql = $this->pdo->prepare("SELECT * FROM restaurants WHERE id_usuario = '$id'");
$sql->execute();
if($sql->rowCount()>=1){
while($row=$sql->fetch()){
$this->datos[]=$row;
}
return $this->datos;
}else{
$sql->errorInfo()[2];
}
}
}
?>
$obj = new Restaurant();
$values = $obj->InfoRest();
foreach($values as $value){
}
<?php echo $value['name_rest'] ?>
运行它会给我带来这些错误。我已经考虑了很多,但仍然无法弄清楚。我已经在执行中完成了 var_dump 并且它释放了 true,并且在同一个项目中我以相同的方式完成了一些事情并且它不会引发错误,例如:
class Models{
protected $pdo;
private $datos;
public function __construct(){
$this->datos=array();
try{
$this->pdo = new
PDO('mysql:host=localhost;dbname=vmenu.us;charset=utf8','root','');
}
catch(PDOExcepcion $e)
{
echo $e->getMessage();
exit;
}
}
public function DetailsRestaurant($id){
$sql = $this->pdo->prepare("SELECT * FROM restaurants WHERE id_restaurant = :id");
$sql->bindParam(':id',$id);
$sql->execute();
if($sql->rowCount()>=1){
while($row = $sql->fetch()){
$this->datos[]=$row;
}
return $this->datos;
}else{
$sql->errorInfo()[2];
}
}
}
然后在我看来:
$obj = new Models();
$id = $_GET['id_restaurant'];
$details = $obj->DetailsRestaurant($id);
foreach($details as $result){
}
<?php echo $result['name_rest'] ?>
如您所见,它是一样的
您的函数中存在语句错误。如果你想验证用户是否存在,你不需要使用
numRows
,但可以直接填充你的数组。由于在
else
其中您可以返回错误消息,因此您可以检查目标中的数组是否为空。该函数可能是这样的(我已经屏蔽了它以防止 SQL 注入)。
并在代码中阅读它:
注意:在
InfoRest
我将实现另一种更合乎逻辑的方式来返回可能的错误,这允许我在接收数据时验证是否有任何键有错误。如果您有兴趣,在未来版本的答案中,我可能会提出该解决方案。我没有在这里这样做,以免离您的代码太远而进入其他内容。这个想法是编写一致的代码。
如果您对这种情况下的错误消息不感兴趣,您可以执行以下操作:
这样,无论是没有数据还是查询失败,都会返回
NULL
,当接收到数据时,你只需要对变量求值即可:如果您有兴趣向用户显示查询中可能出现的错误消息,那么我们将得到三个可能的结果:
在这里编程的一种一致方式是在所有情况下都返回一个数组,该数组可以是
NULL
,具有带有命名键的错误消息,error
或者带有我们的数据的数组。由于在我看来查询不会返回太多行,我认为我们可以使用
fetchAll
简单。因此,我们将所有结果放入一个变量$resultado
中。也可以像以前一样使用while
.该函数如下所示:
当您收到数据时,您会像这样评估三种可能的结果: