[英]Using PDO In A Object
class PDOExtender
{
private $_DBO;
public function openConnection()
{
$dsn = "mysql:host=".DB_HOST.";dbname=".DB_NAME;
$this->_DBO = new PDO($dsn, DB_USER, DB_PASS, array(PDO::ATTR_PERSISTENT => true));
}
}
我知道该类实际上不是在扩展pdo对象,我不知道为什么要这样称呼它。
我需要添加此类,以便可以进行一些查询,尤其是使用准备好的语句。 有人可以给我反馈添加什么来完成此任务。
我目前正在从另一个这样的班级内部调用这个班级,
$this->_siteRegistry = Registry::singleton();
$this->_siteRegistry->storeObject("PDOExtender", "DBO");
$this->_DBO = $this->_siteRegistry->getObject("DBO");
try {
$this->_DBO->openConnection();
} catch(Exception $e) {
throw new Exception("server");
}
在我的旧项目中,我只是使用mysql,但我自己创建了代码,并且我确信这不是完成任务的最佳方法,因此我宁愿不只是使用集成了pdo的代码。
就是这个,
public function runQuery($query, $functionArray = array(), $needResults)
{
$stmtParam = "";
$parameters = array();
$results = array();
foreach ($functionArray as $v) {
$stmtParam .= "s";
}
array_unshift($functionArray, $stmtParam);
$stmt = $this->_dbConnection->prepare($query);
call_user_func_array(array($stmt, 'bind_param'), $functionArray);
$stmt->execute();
if($needResults) {
$meta = $stmt->result_metadata();
while ( $field = $meta->fetch_field() ) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ( $stmt->fetch() ) {
$x = array();
foreach( $row as $key => $val ) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
} else return true;
}
我需要转换旧代码以与pdo配合使用的帮助。
如果有人知道任何出色的教程来演示如何执行此操作,请链接它们,我确实看过但找不到。
感谢您的时间
克里斯
我还有一个用于数据库连接的单例类,您可能要检查它:
class DBConnection extends Singleton{
private $connexion_pdo=null;
protected function initialize(){
$this->connexion_pdo = null;
try{
$this->connexion_pdo = new PDO(PDO_DSN,PDO_USR,PDO_PSW);
}
catch(PDOException $erreur){
throw new Exception($erreur->getMessage());
}
$this->connexion_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->connexion_pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
}
public function execute($query,$values=array()){
try {
$this->connexion_pdo->beginTransaction();
$prepare_execute = $this->getPDOStatement($query);
$prepare_execute->execute($values);
$this->connexion_pdo->commit();
} catch(PDOException $erreur){
throw new Exception($erreur->getMessage());
}
}
public function executeQuery($query,$values=array()){
try {
$resp = array();
//$this->connexion_pdo->beginTransaction();
$prepare_execute = $this->getPDOStatement($query);
$prepare_execute->execute($values);
$resp = $prepare_execute->fetchAll();
//$this->connexion_pdo->commit();
return $resp;
} catch(PDOException $erreur){
throw new Exception($erreur->getMessage());
}
}
public function getPDOStatement($query){
try {
$prepare_execute = null;
$prepare_execute = $this->connexion_pdo->prepare($query,array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
return $prepare_execute;
} catch(PDOException $erreur){
throw new Exception($erreur->getMessage());
}
}
}
我对插入,删除和更新使用“ execute()”,而对SELECT使用“ executeQuery()”。 我知道此代码可以改进,但是主要思想是= D
我已经看到您正在使用while循环来转换查询结果。.我建议您创建另一个管理该类的类。 必须有一个类询问数据库,另一个类将结果映射到所需的内容(数组,对象等)
祝好运!
您可以将PDO类设置为类构造函数的参数。
例:
$pdo = "...connect... & etc.";
$myClass = new MyClass($parameters, $pdo);
MyClass:
class MyClass {
private $pdo;
public function __construct($parameters, $pdo) {
$this->pdo = $pdo;
}
}
现在您可以在AS $ this-> pdo-> query等类中使用PDO。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.