Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]czytanie tablicy za pomocą foreach
Forum PHP.pl > Forum > Przedszkole
zetor
Witam znalazłem gdzieś taką sprytną metodę do tworzenia zapytań sql:
  1. static public function selectData($TABLE, $COLUMNS = Array("*"), $WHERE = Array(), $LOGIC_OPER = "=", $OPER = "AND") {
  2.  
  3. $conn = self::getConnection();
  4.  
  5. $SQL = "SELECT ";
  6.  
  7. if(count($COLUMNS) == 1) {
  8. $SQL .= $COLUMNS[0];
  9. } else {
  10. foreach($COLUMNS as $column) {
  11. $SQL .= $column.",";
  12. }
  13. }
  14.  
  15. $SQL = rtrim($SQL, ',');
  16.  
  17. $SQL .= " FROM {$TABLE}";
  18.  
  19. if(count($WHERE) > 0) {
  20.  
  21. $SQL .= " WHERE ";
  22.  
  23. foreach($WHERE as $key => $val) {
  24. $SQL .= $key.$LOGIC_OPER."'".$val."' ".$OPER." ";
  25. }
  26.  
  27. $SQL = substr($SQL, 0, strlen($SQL)-(strlen($OPER)+2));
  28.  
  29. }
  30.  
  31. $result = $conn->query($SQL);
  32.  
  33. if(!$result) {
  34.  
  35. LogFile::AddLog("Wystąpił błąd połączenia z bazą danych!", __LINE__, __FILE__);
  36. return false;
  37.  
  38. } else {
  39.  
  40. $resultArray = Array();
  41.  
  42. while(($row = $result->fetch_array(MYSQLI_ASSOC)) !== NULL) {
  43.  
  44. $resultArray[] = $row;
  45. }
  46.  
  47. }
  48.  
  49. if(count($resultArray) > 0) {
  50. return $resultArray;
  51. } else {
  52. LogFile::AddLog("Zapytanie bazodanowe zwróciło pusty wynik!", __LINE__, __FILE__);
  53. return false;
  54. }
  55.  
  56. mysqli_close($conn);
  57.  
  58. }


i jej wywołanie:
  1. print_r(DatabaseManager::selectData("users",array("username","id"),array("id" => "2"), ">"));

Metoda selectData tworzy zapytanie SELECT id, username FROM users WHERE id > 2
natomiast ja chcę zrobić coś takiego SELECT id, username FROM users WHERE id > 2, id<5
czyli takie wywołanie:
  1. print_r(DatabaseManager::selectData("users",array("username","id"),array("id" => "2","id" =>"5"), ">","<"));

I teraz nie wiem jak z czytać za pomocą foreach te klucze id w metodzie selectData (linie kodu 23- 25) tak by dla pierwszego klucza id było coś takigo
  1. $SQL .= $key.$LOGIC_OPER."'".$val."' ".$OPER." ";

a dla drugiego id
  1. $SQL .= $key.$LOGIC_OPER2."'".$val."' ".$OPER." ";

(Dodałem $LOGIC_OPER2 = "=" dla drugiego znaku "<" do metody selectData.)
próbowałem to jakoś na if-ach robić, tylko jak odwołać się, że dla klucz o indeksie 0 dla którego ma wykonać się to pierwsze dopisanie $SQL a dla klucza i indeksie 1 (tego id drugiego) to drugie dopisanie
, próbowałem na różne sposoby, ale moja wiedza jest widocznie nikła .

uupah5
Cytat(zetor)
Witam znalazłem gdzieś taką sprytną metodę do tworzenia zapytań sql:


na czym polega jej sprytność? sam zobacz - masz problem z prostą rzeczą, dodanie warunku logicznego OR/AND w WHERE.
IMHO używanie takich sprytnych (inaczej) metod uwstecznia.
rzuć to w cholerę na rzecz czystego SQL, a potem przejdź do prepared statements w PDO albo na jakiś sensowny framework gdzie taką albo inną warstwę abstrakcji będziesz miał (sensownie) zimplementowaną.
serio, szkoda czasu.
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.