zero50x

PDO примеры запросов

Nov 24th, 2015 (edited)
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.46 KB | None | 0 0
  1. ## Что делать если PDO возвращает int как string?
  2. # Ответ: https://toster.ru/q/503132
  3.  
  4. ## Получение объекта из БД
  5. $db = $pdo->prepare(" SELECT `email` FROM `user` ");
  6. $db->execute();
  7. $User = $sth->fetch(PDO::FETCH_OBJ);
  8. $Test = $User->fio;
  9. echo '<pre>'; var_dump($Test); echo '</pre>'; // тут строка
  10. echo '<pre>'; var_dump($User); echo '</pre>'; // тут объект
  11.  
  12.  
  13. ## Вставка с получением вставленного ID
  14. $b=$pdo->prepare(" INSERT INTO `user` SET mail=:mail, datereg=:datereg ");
  15. $b->bindParam(":mail",$null);
  16. $b->bindParam(":datereg",$today);
  17. $b->execute();
  18. $LastId = $pdo->lastInsertId();
  19.  
  20.  
  21. ## Count
  22. $auth = $pdo->prepare('SELECT COUNT(*) FROM `user`');
  23. $auth->execute();
  24. $Count = $auth->fetchAll();
  25. $Num = implode('', $Count[0]);
  26. echo "Num = $Num<br>";
  27.  
  28.  
  29. ## Удаление раньше определённой даты
  30. $st = $pdo->prepare('DELETE FROM `day` WHERE daydate<:daydate');
  31. $st->bindParam(':daydate', $DayDel);
  32. $st->execute();
  33.  
  34.  
  35. ## SELECT с WHERE
  36. $st = $pdo->prepare('SELECT `email` FROM `user` WHERE email=:email');
  37. $st->bindParam(':email', $Email, PDO::PARAM_STR);
  38. $st->execute();
  39. $User = $st->fetchAll();
  40.  
  41. ## SELECT с IN
  42. $y = '1,2,3';
  43. $st = $pdo->prepare('SELECT `daydate` FROM `day` WHERE `id` IN ('.$y.') ');
  44. $st->execute();
  45. $Res = $st->fetchAll();
  46.  
  47. ## SELECT с IN без PREPARE
  48. $a = $pdo->query('SELECT `daydate` FROM `day` WHERE `id` IN ('.$y.') ')->fetchAll();
  49. print_r($a);
  50.  
  51. ## Простой INSERT без условий
  52. $b=$pdo->prepare(" INSERT INTO `gk` SET num=:num, name=:name, text=:text ");
  53. $b->bindParam(":num",$nn[1]);
  54. $b->bindParam(":name",$title_naz);
  55. $b->bindParam(":text",$con[0][$i]);
  56. $b->execute();
  57.  
  58.  
  59. ## UPDATE обновление
  60. $b=$pdo->prepare(" UPDATE `gil` SET tlong=:tlong WHERE id=:id ");
  61. $b->bindParam(":tlong",$tlong);
  62. $b->bindParam(":id",$i);
  63. $b->execute();
  64.  
  65.  
  66. ## Выбрать максимальный id из таблицы
  67. $auth = $pdo->prepare('SELECT max(id) FROM `zemk`');
  68. $auth->execute();
  69. $Count = $auth->fetchAll();
  70.  
  71. ## Запрос с вычитанием (такой же со сложением)
  72. UPDATE `teest` SET `num`=`num`-13 WHERE `id`=1
  73.  
  74. ## Запрос со складыванием и вычитанием полей (складываются 2 поля)
  75. UPDATE `teest` SET `num`=`num`+`num2` WHERE `id`=1
  76.  
  77. ## Посмотреть как выглядит итоговый запрос (если он конструируется)
  78. $a = $pdo->query('SELECT `hash` FROM `ztest` WHERE `id`='.$y.' ');
  79. print_r($a);
  80.  
  81. ## Запрос без prepare если в этом есть необходимость
  82. $a = $pdo->query('SELECT `hash` FROM `ztest` WHERE `id`='.$z.' ')->fetchAll();
  83. print_r($a);
  84.  
  85.  
  86. ## Отладка
  87. ## Если всё верно и есть ошибка скорее всего название поля зарезервированное слово, например like, desc, or и т.д.
  88. try {
  89.     $b->execute();
  90. } catch (PDOException $e) {
  91.     echo "<pre>";
  92.       print_r($e->getMessage());
  93.       $b->debugDumpParams();
  94.     echo "</pre>";
  95. }
  96.  
  97. ###################################################################################
  98. ##################################### SQL #########################################
  99. ###################################################################################
  100.  
  101. // только уникальные значения
  102. SELECT DISTINCT
  103.  
  104. // Из упражнения 5 SQL-EX. Приоритет оператора AND над OR
  105. Неверно т.к. выбирает все строки где (цена <600 и сд 24х) или сд 12х
  106. SELECT model, speed, hd FROM PC WHERE cd='12x' OR cd='24x' AND price < 600
  107. Верно
  108. SELECT model, speed, hd FROM PC WHERE cd='12x' AND price < 600 OR cd='24x' AND price < 600
  109. Верно
  110. SELECT model, speed, hd FROM pc WHERE cd IN ('12x', '24x') AND price < 600;
  111.  
  112. // простейший JOIN
  113. SELECT u.id, u.worker, d.name AS d_name
  114. FROM workday u INNER JOIN worker d ON u.worker = d.id // тут будут неуникальные значения, надо сгруппировать
  115.  
  116. // простейший JOIN теперь только с уникальными строками
  117. SELECT u.id, u.worker, d.name AS d_name
  118. FROM workday u INNER JOIN worker d ON u.worker = d.id GROUP BY `worker`
  119.  
  120.  
  121.  
  122. // Поиск дубликатов MySQL
  123. https://snipp.ru/mysql/sql-duplicate-search
Add Comment
Please, Sign In to add comment