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

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

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

добрый день использую вот этот класс
Листинг программы
  1. class sql{
  2. private static $instance;
  3. private $db;
  4. public static function app() {
  5. if (self::$instance == null) {
  6. self::$instance = new self();
  7. }
  8. return self::$instance;
  9. }
  10. private function __construct() {
  11. setlocale(LC_ALL, 'ru_RU.UTF8');
  12. $this->db = new \PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD);
  13. $this->db->exec('SET NAMES UTF8');
  14. $this->db->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
  15. }
  16. public function select($query, $params = array()) {
  17. //echo $query."<br>";
  18. $q = $this->db->prepare($query);
  19. $q->execute($params);
  20. if ($q->errorCode() != \PDO::ERR_NONE) {
  21. $info = $q->errorInfo();
  22. die($info[2]);
  23. }
  24. return $q->fetchAll();
  25. }
  26. public function getByHash($table, $hash_key, $hash_value, $real_key, $real_value){
  27. $q = $this->db->prepare("SELECT * FROM $table WHERE $hash_key=:$hash_key");
  28. $q->execute(array($hash_key => $hash_value));
  29.  
  30. if ($q->errorCode() != \PDO::ERR_NONE) {
  31. $info = $q->errorInfo();
  32. die($info[2]);
  33. }
  34. while($row = $q->fetch()){
  35. if($row[$real_key] == $real_value)
  36. return $row;
  37. }
  38. return null;
  39. }
  40. public function insert($table, $object, $last=null) {
  41. $columns = array();
  42. foreach ($object as $key => $value) {
  43. $columns[] = $key;
  44. $masks[] = $value;
  45. if ($value === null) {
  46. $object[$key] = 'NULL';
  47. }
  48. }
  49. $columns_s = implode(',', $columns);
  50. $masks_s = "'".implode('\',\'', $masks)."'";
  51. $query = "INSERT INTO $table ($columns_s) VALUES ($masks_s)";
  52. $q = $this->db->prepare($query);
  53. $q->execute($object);
  54. if ($q->errorCode() != \PDO::ERR_NONE) {
  55. $info = $q->errorInfo();
  56. die($info[2]);
  57. }
  58. if($last == true ) {
  59. return $this->lastInsertId();
  60. }
  61. else{
  62. return null ;
  63. }
  64. }
  65. public function lastInsertId(){
  66. $resalt = $this->select("SELECT LAST_INSERT_ID()");
  67. if(isset($resalt[0]['LAST_INSERT_ID()'])){
  68. $resalt = $resalt[0]['LAST_INSERT_ID()'];
  69. }
  70. return $resalt;
  71. }
  72. public function insertMany($table, $object,$last = null,$count=null) {
  73. $columns = array();
  74. $masks2 = array();
  75. $i=1;
  76. foreach ($object as $value) {
  77. $masks = array();
  78. foreach ($value as $key=>$val) {
  79. $masks[] = $val;
  80. if($i==1) {
  81. $columns[] = $key;
  82. }
  83. if ($value === null) {
  84. $object[$key] = 'NULL';
  85. }
  86. }
  87. $masks = implode("','", $masks);
  88. $masks2[]= "('".$masks."')";
  89. $i++;
  90. }
  91. $columns_s = implode('`,`', $columns);
  92. $masks_s = implode(',', $masks2);
  93. //echo $masks_s;
  94. $query = "INSERT INTO `$table` (`$columns_s`) VALUES $masks_s";
  95. $this->select($query);
  96. //$q = $this->db->prepare($query);
  97. //$q->execute($object);
  98. //if ($q->errorCode() != \PDO::ERR_NONE) {
  99. // $info = $q->errorInfo();
  100. // die($info[2]);
  101. // }
  102. return $this->lastOrCount($last,$count,$i-1);
  103. }
  104. public function lastOrCount ($last=null,$count=null,$i=null){
  105. if ($count == true and $last == true ){
  106. return $array = array($this->lastInsertId(),$i);
  107. } else if($last == true){
  108. return $this->lastInsertId();
  109. }
  110. if($count == true ) {
  111. return $i;
  112. }
  113. else{
  114. return null ;
  115. }
  116. }
  117. public function update($table, $object, $where, $params = array()) {
  118. $sets = array();
  119. foreach ($object as $key => $value) {
  120. $sets[] = "$key=:$key";
  121. if ($value === NULL) {
  122. $object[$key] = 'NULL';
  123. }
  124. }
  125. $sets_s = implode(',', $sets);
  126. $query = "UPDATE $table SET $sets_s WHERE $where";
  127. ///echo $query;exit();
  128. $q = $this->db->prepare($query);
  129. $q->execute(array_merge($object, $params));
  130. if ($q->errorCode() != \PDO::ERR_NONE) {
  131. $info = $q->errorInfo();
  132. die($info[2]);
  133. }
  134. return $q->rowCount();
  135. }
  136. public function delete($table, $where, $params = array()) {
  137. $query = "DELETE FROM $table WHERE $where";
  138. $q = $this->db->prepare($query);
  139. $q->execute($params);
  140. if ($q->errorCode() != \PDO::ERR_NONE) {
  141. $info = $q->errorInfo();
  142. die($info[2]);
  143. }
  144. return $q->rowCount();
  145. }
  146.  
  147. }
от этого класса у меня работает парсер 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
Листинг программы
  1. try...catch

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут