Как использовать функцию pdo execute для выбора таблицы? - PullRequest
0 голосов
/ 03 января 2019

index.php

<?php
require_once 'core/init.php';
DB::getInstance()->query("SELECT * FROM users");

В этом классе я использую шаблон синглтона, он успешно связан с БД.

DB.php

<?php
class DB{

private static $_instance = null;
private $_pdo, $_query, $_error = false, $results, $count = 0;    
private function __construct(){
  try{
 $this->_pdo = new PDO('mysql:host='.Config::get('mysql/host') .';db='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password'));
     //echo "Connected";
    }catch(PDOException $e){
        die($e->getMessage());
    }

}
public static function getInstance(){

     if(!isset(self::$_instance)){
         self::$_instance = new DB();
     }
     return self::$_instance;
}

public function query($sql){
    $this->_error = false;

    if($this->_query = $this->_pdo->prepare($sql)){
     //  echo 'prepared statement';

       if($this->_query->execute()){
         echo 'do query';
       }else{
         echo 'did not execute';
       }
    }
  }
 }

Теперь проблема в том, что когда я передаю sql-запрос в query(), он попадает в условие «не выполнено». поэтому мой вопрос, почему он не выполняется. Есть ли какие-либо проблемы совместимости в pdo с MySQL DB или я делаю что-то не так.

1 Ответ

0 голосов
/ 03 января 2019

Я всегда включаю исключения PDO. Если возникает проблема с запросом или любым другим вызовом функций PDO, он выдаст исключение, которое включает сообщение об ошибке.

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

(Вам нужно установить это только один раз, обычно сразу после создания соединения PDO.)

См. http://php.net/manual/en/pdo.error-handling.php

Если вы не хотите использовать исключения, вам следует проверять ошибки после каждого вызова query() или prepare() или execute() и выводить их в журнал ошибок.

$this->_query = $this->_pdo->prepare($sql);
if ($this->_query === false) {
   $this->_error = $this->_pdo->errorInfo();
   error_log("Error '{$this->_error[2]}' when preparing SQL: {$sql}");
   return false;
}
$ok = $this->_query->execute();
if ($ok === false) {
   $this->_error = $this->_query->errorInfo();
   error_log("Error '{$this->_error[2]}' when executing SQL: {$sql}");
   return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...