【问题标题】:Converting to PDO prepared statements from mysqli从 mysqli 转换为 PDO 准备好的语句
【发布时间】:2023-04-09 03:23:01
【问题描述】:

我有以下代码,它选择一个表,遍历所有与演员匹配的值并显示该演员的评论。

include("app/config/db.php");
$aid=$actor['id'];

$query = "SELECT * FROM `reviews` WHERE `actor_id` = $aid";

$result = $mysqli->query($query);

$num_results = $result->num_rows;

if( $num_results ){

//loop to show each records

while( $row = $result->fetch_assoc() ){

extract($row);

echo "<span class=\"review-score\">";
echo $row['score']*10;
echo "</span>";
echo " by <strong>";
echo $row['author'];
echo "</strong>";
echo " on <strong>";
echo $row['created_at'];
echo "</strong>";
echo "<p class=\"review-body\">";
echo $row['body'];
echo "</p>";
echo "</br>";


}


}else{

echo "No records found.";

}

$result->free();

$mysqli->close();

我想转换为使用 PDO 准备好的语句。 这是我尝试过的。它不显示分配给演员的任何评论。请帮忙

include("app/config/db.php");
$aid=$actor['id'];


$st = DBase::singleton()
        ->prepare(
            'select * ' .
            'from `reviews` ' .
            'where `actor_id` like :aid ' .
            'limit 0,10');

$st->bindParam(':aid', $aid, PDO::PARAM_STR);

if ($st->execute())
{
       while ($row = $st->fetch(PDO::FETCH_OBJ))
        {

       echo "<span class=\"review-score\">";
echo $st['score']*10;
echo "</span>";
echo " by <strong>";
echo $st['author'];
echo "</strong>";
echo " on <strong>";
echo $st['created_at'];
echo "</strong>";
echo "<p class=\"review-body\">";
echo $st['body'];
echo "</p>";
echo "</br>";


}
}

DBase:单例

  static public function singleton()
    {
        if (!is_object(self::$pdo))
        {
            self::$pdo = new PDO('mysql:dbname=' . self::DATABASE . ';host=' . self::HOST, 
                                    self::USERNAME, 
                                    self::PASSWORD);
        }
        return self::$pdo;
    }

【问题讨论】:

  • 是否至少连接

标签: php pdo mysqli


【解决方案1】:

您将每一行的结果存储在 $row 中,但在您想要显示数据时不访问 $row。

while ($row = $st->fetch(PDO::FETCH_OBJ))
{
    ...
    echo $st['score']*10;

回声线应该是:

    echo $row->score*10;

您还获取对象,但以数组的形式访问数据。

这就是我被教导写一个while循环的方式..我还能怎么做?

我的观点是,如果为变量分配行的连续值,则数据在该变量中,而不是在迭代行的对象中。您所做的与此类似:

for ($i = 0; $i < $count; $i++) {
    echo $count;
}

而在该示例中,应该这样做以在循环中获取连续值:

for ($i = 0; $i < $count; $i++) {
    echo $i;
}

【讨论】:

  • “你也在获取对象,但以数组的形式访问数据。”这就是我被教导写一个while循环的方式..我还能怎么做?
猜你喜欢
  • 2012-08-23
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多