Перехват ошибок pdo - MySQL

Узнай цену своей работы

Формулировка задачи:

добрый день использую вот этот класс
   class sql{
        private static $instance;
        private $db;
 
        public static function app() {
            if (self::$instance == null) {
                self::$instance = new self();
            }
 
            return self::$instance;
        }
 
        private function __construct() {
            setlocale(LC_ALL, 'ru_RU.UTF8');
            $this->db = new \PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD);
            $this->db->exec('SET NAMES UTF8');
            $this->db->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
        }
 
        public function select($query, $params = array()) {
            //echo $query."<br>";
          $q = $this->db->prepare($query);
            $q->execute($params);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->fetchAll();
        }
        
        public function getByHash($table, $hash_key, $hash_value, $real_key, $real_value){
            $q = $this->db->prepare("SELECT * FROM $table WHERE $hash_key=:$hash_key");
            $q->execute(array($hash_key => $hash_value));

            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            while($row = $q->fetch()){
                if($row[$real_key] == $real_value)
                    return $row;
            }
            
            return null;
        }
 
        public function insert($table, $object, $last=null) {
            $columns = array();
 
            foreach ($object as $key => $value) {
 
                $columns[] = $key;
                $masks[] = $value;
 
                if ($value === null) {
                    $object[$key] = 'NULL';
                }
            }
 
            $columns_s = implode(',', $columns);
            $masks_s = "'".implode('\',\'', $masks)."'";
 
            $query = "INSERT INTO $table ($columns_s) VALUES ($masks_s)";
 
            $q = $this->db->prepare($query);
            $q->execute($object);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            if($last == true ) {
                return $this->lastInsertId();
            }
            else{
                return null ;
            }
        }
        public function lastInsertId(){
            $resalt = $this->select("SELECT LAST_INSERT_ID()");
 
            if(isset($resalt[0]['LAST_INSERT_ID()'])){
                $resalt = $resalt[0]['LAST_INSERT_ID()'];
            }
            return $resalt;
        }
        public function insertMany($table, $object,$last = null,$count=null) {
            $columns = array();
            $masks2 = array();
            $i=1;
            foreach ($object as $value) {
                $masks = array();
                foreach ($value as $key=>$val) {
                    $masks[] = $val;
                    if($i==1) {
                        $columns[] = $key;
                    }
 
                    if ($value === null) {
                        $object[$key] = 'NULL';
                    }
                }
                $masks = implode("','", $masks);
                $masks2[]= "('".$masks."')";
 
                $i++;
            }
 
            $columns_s = implode('`,`', $columns);
 
            $masks_s = implode(',', $masks2);
            //echo $masks_s;
 
            $query = "INSERT INTO `$table` (`$columns_s`) VALUES $masks_s";
 
            $this->select($query);
            //$q = $this->db->prepare($query);
            //$q->execute($object);
 
            //if ($q->errorCode() != \PDO::ERR_NONE) {
             //   $info = $q->errorInfo();
            //    die($info[2]);
           // }
 
            return $this->lastOrCount($last,$count,$i-1);
 
        }
        public function lastOrCount ($last=null,$count=null,$i=null){
 
            if ($count == true and $last == true ){
 
                return $array = array($this->lastInsertId(),$i);
 
            } else if($last == true){
 
                return $this->lastInsertId();
            }
            if($count == true ) {
 
                return $i;
            }
            else{
                return null ;
            }
        }
        
        public function update($table, $object, $where, $params = array()) {
            $sets = array();
 
            foreach ($object as $key => $value) {
 
                $sets[] = "$key=:$key";
 
                if ($value === NULL) {
                    $object[$key] = 'NULL';
                }
            }
 
            $sets_s = implode(',', $sets);
            $query = "UPDATE $table SET $sets_s WHERE $where";
            ///echo $query;exit();
            $q = $this->db->prepare($query);
            $q->execute(array_merge($object, $params));
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->rowCount();
        }
 
        public function delete($table, $where, $params = array()) {
            $query = "DELETE FROM $table WHERE $where";
            $q = $this->db->prepare($query);
            $q->execute($params);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->rowCount();
        }

    }
от этого класса у меня работает парсер vk, информации проходит много около 100 запросов в минуту и иногда вылетает ошибка You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 скажите как можно помимо этой ошибки вывести на экран какую нибудь переменную которая на мой взгляд поможет определить ошибку например $query спасибо

Решение задачи: «Перехват ошибок pdo»

textual
Листинг программы
try...catch

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5