Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO
Forum PHP.pl > Forum > PHP
boosik01
Witam.
Chciałem napisać funkcję uptade do PDO, tzn przykład bez użycia mojej funkcji:

  1. $x= $pdo->prepare("UPDATE users SET a=:a WHERE id=:id");
  2. $x->bindValue(':id', $id,PDO::PARAM_STR);
  3. $x->bindValue(':a', $a),PDO::PARAM_STR);
  4. $x1=$x->execute();

i jak widzicie przy większej ilości podpinania jest dużo więcej kodu, dlatego też chce napisać funkcję, która ułatwiła by robotę. funkcja miała by postać:

uptade($a, $id) (biorę pod uwagę że wszystkie parametry będą przypisane do tej same zmiennej, czyli :a = $a, :zmienna_jakas = $zmienna_jakas.

Problem się pojawia że nie wiem ilę w danym momencie będę chciał zaktualizować bazy. Może być to równie dobrze 1 kolumna lub też 10. Myślałem by zrobić coś w tym stylu:

  1.  
  2.  
  3. function update($db)
  4. {
  5. return $db[0] ;
  6. }
  7.  
  8. echo update($db[0] = 'aa', $db[1] = 'ccc', $db[2] = 'bb');
  9.  


I później odwoływać się do zmiennych jako tablic. Lecz po pierwsze nie wiem czy to jest dobry pomysł, a po drugie to ten przykład coś nie chula, wyświetla tylko literkę a.

Z góry dziękuję za pomoc wink.gif
CuteOne
Funkcja bindująca dla PDO + fetch i execute.. lekko prymitywne ale u mnie zdało egzamin smile.gif
  1.  
  2. /**
  3. * prepareQuery() - prepare query string, binding parameters to value
  4. *
  5. * @param $query (string)
  6. * @param $parameters (array)
  7. * @return $prepareQuery (resource)
  8. */
  9. private function prepareQuery($query, $parameters=array()) {
  10.  
  11. $prepareQuery = $this->_pdo -> prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  12.  
  13. if(!empty($parameters)) {
  14.  
  15. foreach($parameters as $key => &$value) {
  16.  
  17. $prepareQuery->bindValue(':'.$key, $value, is_numeric($value) ? PDO::PARAM_INT : PDO::PARAM_STR);
  18. }
  19. }
  20.  
  21. try {
  22.  
  23. $prepareQuery->execute();
  24. }
  25. catch(PDOException $e) {
  26.  
  27. /**
  28. * @see Db_Exception
  29. */
  30. require_once LIBRARY_PATH . '/db/Exception.php';
  31. throw new Db_Exception($e->getMessage(), $e->getCode(), $e);
  32. }
  33.  
  34. return $prepareQuery;
  35. }
  36.  
  37.  
  38. /**
  39. * fetchAll() - fetching all data from table, return assoc array
  40. *
  41. * @param $query (string)
  42. * @param $parameters (array)
  43. * @return (array)
  44. */
  45. public function fetchAll($query, $parameters=array()) {
  46.  
  47. $query = $this -> prepareQuery($query, $parameters);
  48.  
  49. return $query -> fetchAll(PDO::FETCH_ASSOC);
  50. }
  51.  
  52.  
  53. /**
  54. * fetchRow() - fetching only one row from db, return assoc array
  55. *
  56. * @param $query (string)
  57. * @param $parameters (array)
  58. * @return (array)
  59. */
  60. public function fetchRow($query, $parameters=array()) {
  61.  
  62. $query = $this -> prepareQuery($query, $parameters);
  63.  
  64. return $query -> fetch(PDO::FETCH_ASSOC);
  65. }
  66.  
  67.  
  68. /**
  69. * execute() - execute query, you can use it for update, delete or select command
  70. *
  71. * @param $query (string)
  72. * @param $parameters (array)
  73. * @return (integer)
  74. */
  75. public function execute($query, $parameters=array()) {
  76.  
  77. return $this->_pdo -> prepareQuery($query, $parameters);
  78. }
  79.  


sposób użycia
  1. $pdo = new Db_MySQL();
  2.  
  3. $data = $pdo -> fetch("SELECT * FROM aaa WHERE id = :id", array('id' => $id));
Spawnm
Bez sensu, czemu nie dasz np:
  1. function query($sql, array $args)
  2. {
  3. $query = $this->db->prepare($sql);
  4. $query->execute($args);
  5. return $query;
  6. }

i teraz
$r = $db->query('update table x set a=:a', array(':a'=>666));
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.