Задать вопрос

Как правильно обрабатывать ответы PHP PDO?

Ни как не пойму, как сообщить объекту PDOStatement, что бы тот отдал при SELECT, SHOW, DESCRIBE или EXPLAIN массив, а при остальных TRUE или FALSE? Ниже приведу метод который я использую для SELECT. Как его поправить так, что он обрабатывал ответы правильно?
<?php
class Database extends Api
{
	public $settings = [
		'host' 		=> '',
		'name'		=> '',
		'user'		=> '',
		'pass'		=> ''
	];
	
	private $pdo = null;
	
	public function query ( $string )
	{
		$response = null;
		if( !$this->settings['host'] || !$this->settings['name'] || !$this->settings['user'] || !$this->settings['pass'] || !$string ){
			return $response;
		}elseif( !$this->pdo ){
			$this->pdo = new PDO(
				'mysql:host='. $this->settings['host'] .';dbname='. $this->settings['name'], $this->settings['user'], $this->settings['pass']);
		}
		$response = $this->pdo->query( $string );

		if ( !$response ) return $response;

		$response->rows = [];
		while( $row = $response->fetch( PDO::FETCH_ASSOC ) ){
			$response->rows[] = $row;
		}
		return $response->rows;
	}
}

Спасибо!
  • Вопрос задан
  • 331 просмотр
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@SergeyZelensky-Rostov
Как-то так работоспособность не проверял, не где, могут быть ошибки пиши исправим
Если singletone не нужен можно выбросить
<?php 
 class QueryDB extends PDO{
     private static $_instance = null;
     private function __construct ($host, $dbname, $username, $pass) {
         parent::__construct('mysql:host=' . $host . ';dbname=' . $dbname, $username, $pass);
     }
     private function __clone(){}
     public static function getInstance($configDB){
         if (self::$_instance === null) {
             self::$_instance = new self($configDB['host'],$configDB['db'],$configDB['user'], $configDB['pass']);
         }else{
            return self::$_instance; 
         }
     }
     protected function getDbObject(){
         return $this->_instance;
     }
     public function select ($query='', $Parametrs=null) {
         $pdo = $this->getDbObject();
         $sth = $pdo->prepare($query);
         if ($sth->execute($Parametrs)) {
            return $sth->fetchAll(PDO::FETCH_ASSOC);
         }else{
             throw new Exception('Запрос не выполнен'); 
         }
         
     }
     public function insert($table='', $fields=array()) {
         $pdo = $this->getDbObject();
         // для наглядности вообще так делать не стоит
         $values = 'VAlUES(';
         $keys = '(';
         foreach($fields as $key=>$val){
             $values .=$val . ',';
             $keys .=$key . ',';
         }
         trim($values,',');
         $values .= ')';
          trim($keys,',');
         $keys .= ')';
         // конец лапшы
         $sth = $pdo->prepare('INSERT INTO `'.$table.'` '. $keys. ' ' .$values );
         return $sth->execute();
     }
     
 }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы