Перехват ошибок pdo - MySQL
Формулировка задачи:
добрый день использую вот этот класс
от этого класса у меня работает парсер 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 спасибо
Листинг программы
- 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();
- }
- }
Решение задачи: «Перехват ошибок pdo»
textual
Листинг программы
- try...catch
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д