私はOOPを学ぼうとしていて、PDOを使用するクラスを作成することにしました。ここに私のクラスからのいくつかのコードがあります。
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);
}