PHP PDO语句类似于mysql_fetch_row($query,mysql_ASSOC))

PHP PDO语句类似于mysql_fetch_row($query,mysql_ASSOC)),php,html,mysql,pdo,Php,Html,Mysql,Pdo,我正在尝试获取查询结果,以便将mysql中的数据用作页面上的变量 在这里,在给定的代码中,我已经将酒店价值硬编码为105,但我正在尝试从另一个页面获取价值为get $ratedID =$_GET['ratedhotel']; 在这里,我的页面主体嵌入在while下。但是页面总是空的。这就是我现在拥有的 $hotel=$database->query('SELECT * FROM rate WHERE HotelID=:hotel '); $database->bind(':hot

我正在尝试获取查询结果,以便将mysql中的数据用作页面上的变量

在这里,在给定的代码中,我已经将酒店价值硬编码为105,但我正在尝试从另一个页面获取价值为get

 $ratedID =$_GET['ratedhotel'];
在这里,我的页面主体嵌入在while下。但是页面总是空的。这就是我现在拥有的

$hotel=$database->query('SELECT * FROM rate WHERE HotelID=:hotel ');
$database->bind(':hotel', '105');
$hotel->setFetchMode(PDO::FETCH_ASSOC);
while($r = $hotel->fetch())
下面是我以前的经历

 //$query = $db->query("SELECT * from rate WHERE        HotelId='$ratedhotelID'");
   //while($hotel = mysql_fetch_row($query, MYSQL_ASSOC))
我有一些已定义的函数,可以作为库使用

   <?php
    class Database{
    private $host=DB_HOST;
    private $user=DB_USER;
    private $pass=DB_PASS;
    private $dbname=DB_NAME;
    private $stmt;
    private $dbh;
    private $error;

    public function __construct()
    {
    // Set DSN
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
    // Set options
    $options = array(
    PDO::ATTR_PERSISTENT    => true,
    PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
    );
    // Create a new PDO instanace
       $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);

    }



    public function query($query){
        $this->stmt = $this->dbh->prepare($query);
    }



    public function bind($param, $value, $type = null){
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute(){
        return $this->stmt->execute();
    }

    public function resultset(){
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }


    public function single(){
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function rowCount(){
        return $this->stmt->rowCount();
    }


    }

只需将harcoded值
'105'
替换为对
$ratedId
的引用即可

$database->bind(':hotel', $ratedId, PDO::PARAM_INT);
我不明白为什么那对你不起作用。如果需要库函数将要分配的内容以外的内容,请包括绑定类型

var_dump($rows);
(很可能我完全误解了你提出的问题。)


跟进

我希望
是一个多维数组,因为它看起来像是一个“fetch all”操作已经完成。每一行都将是一个数组,但它们都将包含在另一个数组中

要查看阵列中的内容,可以执行以下操作:

$rows[0]['Lowrate']
要从第一行获取
LowRate
值,我认为您需要这样引用它:

foreach($rows as $row) {
   echo $row['LowRate'];
}
(我认为它是基于零的,如果不是,它将是一个[1]。
var\u dump
将显示它的外观。)

仅仅因为你得到了一个数组,这并不意味着其中有行,它可能是一个空集。行数为零的结果集是有效的结果集,因此您确实需要检查所需的行是否在其中

标准模式是在行数组中循环,并单独处理每一行。例如,使用
foreach
循环


PDO包装器,尤其是那些将瞬态对象(如
PDOStatement
存储为属性)存储为属性的包装器,麻烦比它们的价值还多。除非您在PDO之上添加了重要的功能,否则我将避免编写一个。另外,您的主要问题是,
Database::query
不返回任何内容,因此您试图在空对象上执行
setFetchMode
。启用错误报告会向您指出这一点:$ratedID很有效,但我想将数据从mysql中获取到aray并使用html中的对象。我使用了一个获取行而不是数组,因为我只提取了一行数据。这解决了问题,而且我不必使用类似行[0]的语法。非常感谢您的帮助
var_dump($rows);
$rows[0]['Lowrate']
foreach($rows as $row) {
   echo $row['LowRate'];
}