gpt4 book ai didi

PHP 和 PDO 类

转载 作者:行者123 更新时间:2023-11-29 02:00:48 28 4
gpt4 key购买 nike

我正在尝试学习 OOP 并决定创建一个使用 PDO 的类(class)。这里是我类(class)中的一些代码。

class DB extends PDO {

public function _construct($dsn,$user,$pass,$options=""){
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
try {
parent::__construct($dsn, $user,$pass,$options);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}


public function run($query,$all="",$secure=""){
if(empty($secure)){
$qry=$this->query($query);
}else{
$qry=$this->prepare($query);
$qry->execute($this->cleanup($secure));
}
if($all=="all"){
return $qry->fetchAll(PDO::FETCH_ASSOC);
}else{
return $qry->fetch(PDO::FETCH_ASSOC);
}
}



private function cleanup($secure) {
if(!is_array($secure)) {
if(!empty($secure))
$secure = array($secure);
else
$secure = array();
}
return $secure;
}

public function rowCount($table,$extra=""){
$query="Select count(*) from ".$table;
if(!empty($extra)){
$query="Select count(*) from ".$table." ".$extra;
}
$qry=$this->query($query)->fetchColumn();
return $qry;
}

public function select($table,$extra=""){
$query="Select * from ".$table;
if(!empty($extra)){
$query="Select * from ".$table." ".$extra;
}
return $this->query($query);
}


}

为什么我没有得到相同的结果,以下代码之间有什么区别?

//usage 1 (it doesnt work that way)
$return =$qry->fetchAll(PDO::FETCH_ASSOC);

return $return;

//usage 2 (it is exactly what i need but i want to learn the difference)
return $qry->fetchAll(PDO::FETCH_ASSOC);

编辑:我真的不知道我做错了什么,但这些用法之间似乎没有区别。它们现在都可以工作。

我的方法是这样的

$result=$db->run("my query","all");
foreach($result as $r){
//
}

在构造方法中,我使用 PDO 的查询方法将字符设置为 utf-8,但它不起作用。如果我在创建 DB 对象后使用它,它就可以工作。

try {
parent::__construct($dsn, $user,$pass,$options);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->query("SET NAMES 'UTF8'");
$this->query("SET CHARACTER SET UTF8");
}

最后一个问题

            //what do u think about this usage.I didnt run accross some thing like this
//all the pdo classes i checked use it just
// return $qry->fetchAll(PDO::FETCH_ASSOC);
//do you think i need to separate "fetchAll" and "fetch"
if($all=="all"){
return $qry->fetchAll(PDO::FETCH_ASSOC);
}else{
return $qry->fetch(PDO::FETCH_ASSOC);
}

最佳答案

不要扩展 PDO 它在很多方面都是错误的。你应该像你的标题建议的那样使用它

class Database
{
protected $pdoInstance;

public function __construct($pdoInstance)
{
$this->pdoInstance = $pdoInstance;
}

public function query($query)
{
$preparedStatement = $this->pdoInstance->prepare();
/* bla bla bla */
}
}

这段代码更有意义,是良好的面向对象编程的一个更好的例子。 (虽然它仍然让我感到畏缩,但这是一个好的开始)

关于PHP 和 PDO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15248214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com