Пока
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, чтобы я мог выполнять некоторые запросы, в частности, используя подготовленные операторы. Может ли кто-нибудь дать мне обратную связь о том, что добавить для достижения этой цели.
В настоящее время я вызываю этот класс из другого класса, как этот,
$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.
Если кто-нибудь знает какие-либо замечательные учебники, которые показывают, как это сделать, пожалуйста, свяжите их, я посмотрел, но не смог найти ни одного.
Спасибо за ваше время
Chris