【问题标题】:PHP-OOP: How to use results from a PDO fetchAll outside of the classPHP-OOP:如何在类外使用 PDO fetchAll 的结果
【发布时间】:2012-07-23 08:27:39
【问题描述】:

我是 PHP 和 OOP 的新手,我一直在使用 PDO 类来连接和检索我的 MYSQL 数据库中的信息。以下是相关文件的摘录:

歌词.class.php

<?php 
class lyrics{

public $con;
public $kill;
public function __construct(connection $con){

    $this->con = $con->con;     
}

public function getLyricsFromURL($lyricsid){
    $results;

    $getlyrics = $this->con->prepare("SELECT * FROM `lyrics` WHERE lyrics_id = :lyricsid");
    $getlyrics->bindParam(':lyricsid',$lyricsid,PDO::PARAM_INT);
    $getlyrics->execute();
    $results = $getlyrics->fetchAll(PDO::FETCH_OBJ);


    foreach ($results as $result) {

        echo $result->lyrics_content;


    }

}

index.php:

<?php
include 'inc/header.php';
include 'libs/connection.class.php';
include 'libs/lyrics.class.php';

$conn = new connection();
$lyrics = new lyrics($conn);

$lyrics->getLyricsFromURL(55);


?>

<h1><?php echo $lyrics->result->lyrics_title;?></h1>

其他人: 另一个文件中有一个连接类,但我不会在这里展示它,只知道连接有效。

问题:* 我遇到的问题是我想从 lyrics 类中的 **getLyricsFromURL() 方法中回显单个结果列,我已经尝试过,但它不起作用。

这样做的正确方法是什么?

提前致谢。

【问题讨论】:

    标签: php oop properties pdo fetchall


    【解决方案1】:

    getLyricsFromURL() 方法设置为返回一个元素数组,但您将返回值作为单个元素引用,试试这个:

    public function getLyricsFromURL($lyricsid){
    
        // This isn't necessary
        //$results;
    
         // Better to use $stmt as the variable here, obviously this is subjective
         // but will serve you better when you are working on other stmt objects
         $stmt = $this->con->prepare("SELECT * FROM `lyrics` WHERE lyrics_id = :lyricsid");
    
         $stmt->bindParam(':lyricsid', $lyricsid,PDO::PARAM_INT);
         $stmt->execute();
    
         $results = $stmt->fetchAll(PDO::FETCH_OBJ);
    
         return $results;
    }
    
    ...
    
    // Instatiate our lyrics object
    $lyric = new lyrics($conn);
    
    // Make request for lyrics associated to row #55 and store results in local var
    $lyrics = $lyric->getLyricsFromURL(55);
    
    // Notice we are referencing the first element of the array
    <h1><?php echo $lyrics[0]->lyrics_title;?></h1>
    

    【讨论】:

    • 感谢您的回复,但这不起作用:(。收到此错误:Fatal error: Cannot use object of type lyrics as array 不确定这是否有帮助,但我选择将结果作为对象回显:$results = $stmt-&gt;fetchAll(PDO::FETCH_OBJ)
    • 明白,但是 fetchall 应该返回一个基于模式(列名)的匿名对象数组,它应该可以通过标准数组调用访问。您可以在$lyrics = $lyric-&gt;getLyricsFromURL(55); 行之后执行var_dump($lyrics); 并将结果发布到pastebin.com 吗?
    • 是的,这不是我所期望的,您是否按照答案中的概述实现了我的代码更改?我看不出您是如何获得像您发布的那样的对象构造的。
    • 如果调用代码与您在 pastebin 中的代码相同,那么问题是您没有使用我建议的更改对其进行更新。我建议进行建议的更改,看看它是否有效。
    • 没问题,很高兴听到您成功了。顺便说一句,尽早进入 PDO 做得很好,它将帮助你走上这条路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2011-12-04
    • 2020-04-06
    • 1970-01-01
    • 2011-07-05
    • 2014-11-05
    • 1970-01-01
    相关资源
    最近更新 更多