【问题标题】:PHP PDO statements similar to mysql_fetch_row($query, MYSQL_ASSOC))PHP PDO 语句类似于 mysql_fetch_row($query, MYSQL_ASSOC))
【发布时间】:2015-01-16 03:35:12
【问题描述】:

我正在尝试获取查询结果,以便可以将 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();
    }


    }

我不确定并且是 PDO 的新手。非常感谢任何帮助。

更新

我对php进行了修改,代码如下:

$database= new Database();
$database->query('SELECT * from rated where HotelID =:hotel');
$database->bind(':hotel', $HotelID);
//echo $database->resultset();
$rows=array();
$rows= $database->resultset(PDO::FETCH_ASSOC);
//while($rows= $database->resultset());
//while($hotel = $q->fetchAll(PDO::FETCH_ASSOC));
  { 
  echo "<pre>";
print_r($rows);
echo "</pre>";
  echo "<div>'.$rows[LowRate].'<div>";


  };
  ?>

因此,基于以上内容,我可以在我的页面上看到数组,因此查询有效。 但我想在我的 html 中使用变量。

<p class="price-display-large page-price-text">'.$rows[LowRate].''.rows[PropertyCurrency].'</p>

但这不起作用。

【问题讨论】:

  • PDO 包装器,尤其是那些将像PDOStatement 这样的瞬态对象存储为属性的包装器比它们的价值更麻烦。除非您在 PDO 之上添加重要功能,否则我会避免编写一个
  • 哦,另外,您的主要问题是 Database::query 不返回任何内容,因此您尝试在空对象上执行 setFetchMode。启用错误报告会向您指出这一点

标签: php html mysql pdo


【解决方案1】:

只需将硬编码值'105' 替换为对$ratedId 的引用即可。

$database->bind(':hotel', $ratedId);

我不明白为什么这对你不起作用。如果您想要的不是库函数将要分配的内容,请包括绑定类型。

$database->bind(':hotel', $ratedId, PDO::PARAM_INT);

(我很可能完全误解了你问的问题。)


跟进

我希望rows 是一个多维数组,因为它看起来像是完成了“获取所有”操作。每行都是一个数组,但这些都将包含在另一个数组中。

要查看数组中的内容,您可以执行以下操作:

var_dump($rows);

要从第一行获取 LowRate 值,我认为您需要像这样引用它:

$rows[0]['Lowrate']

(我认为它是从零开始的,如果不是,它将是 [1]。var_dump 将向您展示它的外观。)

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

规范模式是循环遍历行数组,并单独处理每一行。例如,使用foreach 循环。

foreach($rows as $row) {
   echo $row['LowRate'];
}

【讨论】:

  • 嗨 $ratedID 有效,但我想从 mysql 获取数据到 aray 并使用 html 中的对象。
  • 我使用了一个提取行而不是一个数组,因为无论如何我只提取一行数据。这解决了问题,我不必像语法一样使用 row[0]。非常感谢你的帮助
猜你喜欢
  • 2012-12-11
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-02-26
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多