0

我正在修改一个“应该”允许我轻松执行 fetchall 查询并在 foreach 语句中显示结果的类。我假设一切正常,因为我没有错误。至于foreach - 这一定是问题吗?我将如何 foreach 从中获得的结果$connect->query()?我是在我的函数中使用任何数据库 OOP 框架的新手,所以我可能完全走错了路线。

 <?

error_reporting(1);

class dbconnect {

private $host;
private $database;
private $username;
private $password;

private $pdo;
private $error;

    public function __construct() {

        $this->host     = "localhost";              // Host
        $this->database = "images";                 // Database Name
        $this->username = "*";              // Username
        $this->password = "*";  // Password
        $options  = array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        );

        try {
            $this->pdo = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8", $this->username, $this->password, $options);
        }
        catch(PDOException $e) {
            $this->error = $e->getMessage();
        }

    }

    public function query($query) {

        try {
            $stmt = $this->pdo->prepare($query);
            $stmt->execute(); 
        } catch(PDOException $ex) { 
            die("Failed to run query: " . $ex->getMessage()); 
        } 

        $rows = $stmt->fetchAll();
        return $rows;

    }

}

$connect = new dbconnect;
$rows = $connect->query("select * from photos");
foreach($rows as $row):
    print $row['id'];
endforeach;



?>
4

4 回答 4

2

很确定您实际上从未执行过查询:

        $this->stmt = $this->pdo->prepare($query);
        $stmt->execute(); 

我相信(我可能是错的,我自己对 PDO 还很陌生,而且我还没有为它建立一个类),你需要说 $this->stmt->execute();

于 2013-08-23T16:49:13.173 回答
2

$rows您在内部声明的变量query外部无法访问,它是该函数的本地变量。最有可能的是,您只是想将return这些结果提供给调用者:

$rows = $stmt->fetchAll();
return $rows; // return value from function...

并让调用者在自己的变量中捕获返回值:

$rows = $connect->query("select * from images"); // ... is received by caller
foreach($rows as $row):

另请查看 dougjore 的答案,您正在混合$this->stmt$stmt在您的query方法中。

于 2013-08-23T16:50:26.797 回答
1

你可以做

//PDO::FETCH_ASSOC: 返回一个按列名索引的数组,如结果集中返回的那样

$this->stmt = $this->pdo->prepare($query);
$this->stmt->execute();

while ($result = $this->stmt->fetch(PDO::FETCH_ASSOC))
{

  //do something with the result
}

在此处查看获取 PDO 查询结果的更多选项:http: //php.net/manual/en/pdostatement.fetch.php

于 2013-08-23T16:50:13.463 回答
0
$connect = new dbconnect;
$sql="select * from photos";
$stmt=$connect->pdo->prepare($sql); 
$stmt->execute();
$result=$stmt->fetch(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
   echo $key . "-" . $value . "<br/>";
}
于 2015-04-27T21:35:57.293 回答