Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Nazwa kolumny jako zmienna, SELECT wyszukuje tylko w jednej kolumnie
ChaYim
post 8.03.2018, 11:02:32
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


Witam.
Edytuję niewielki plugin na WordPressie.
Zasada działania jest prosta: Wyszukaj po: Nazwisku/Emailu/Telefonie/Kuponie następującą frazę...
Mam w formularzu listę wyboru, która definiuje zmienną $column oraz input dla zmiennej $search. Dlaczego zapytanie do MySQL:
  1. $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_list WHERE $column = $search"));

Działa tylko w przypadku jednej kolumny?
W opcjach listy posiadam value: email, name2, phone, oraz coupon - odpowiada to nazwom kolumn w tabeli. Gdy wyszukuję w kolumnie 'phone' wtedy prawidłowo zwraca wyniki. Jednak w pozostałych sytuacjach zwraca zerowe rezultaty. Dodam, że sprawdziłem wszystkie nazwy i czy _POST zwraca zmienną $column oraz $search.

Z góry dzięki za pomoc.

Ten post edytował ChaYim 8.03.2018, 11:05:35
Go to the top of the page
+Quote Post
Pyton_000
post 8.03.2018, 11:07:50
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


To teraz proste ćwiczenie.
Wyświetl sobie to zapytanie gdy przesyłasz więcej kolumn...
Go to the top of the page
+Quote Post
Neutral
post 8.03.2018, 11:09:08
Post #3





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

Ostrzeżenie: (0%)
-----


Jeśli $column jest tablicą to powinna tam być pętla i do tego takie coś:

$column[$i]

Go to the top of the page
+Quote Post
ChaYim
post 8.03.2018, 11:13:39
Post #4





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


$column jest przesyłana z:
  1. <select name="column">
  2. <option value="name2">Nazwisko</option>
  3. <option value="email">Email</option>
  4. <option value="phone">Nr telefonu</option>
  5. <option value="coupon">Kod kuponu</option>


Przetestowałem:
  1. $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_emailinglist WHERE phone = $search"));

i działa. Jednak kiedy używam tych zapytań:
  1. $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_emailinglist WHERE name2 = $search"));
  2. $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_emailinglist WHERE email = $search"));
  3. $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_emailinglist WHERE coupon = $search"));

Jakimś sposobem nie otrzymuję wyników.

Struktura kolumn jest identyczna:
name2 varchar(89) latin2_general_ci
coupon varchar(89) latin2_general_ci
phone varchar(89) latin2_general_ci
email varchar(89) latin2_general_ci

Ten post edytował ChaYim 8.03.2018, 11:26:45
Go to the top of the page
+Quote Post
Pyton_000
post 8.03.2018, 11:27:34
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Miałes wyświetlić wygenerowane zapytania a nie podstawiać ręcznie dane....
Go to the top of the page
+Quote Post
ChaYim
post 8.03.2018, 11:35:56
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 8.03.2018, 12:27:34 ) *
Miałes wyświetlić wygenerowane zapytania a nie podstawiać ręcznie dane....

Nie bardoz rozumiem gdzie i w jaki sposób to zrobić... blink.gif
Go to the top of the page
+Quote Post
Pyton_000
post 8.03.2018, 11:40:12
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


np. tak:

Kod
var_dump("SELECT * FROM wp_list WHERE $column = $search");


Ten post edytował Pyton_000 8.03.2018, 11:40:32
Go to the top of the page
+Quote Post
ChaYim
post 8.03.2018, 11:46:33
Post #8





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


Dzięki wielkie wink.gif
Dla wyboru z listy:
Nazwisko:
  1. string(49) "SELECT * FROM wp_list WHERE name2 = Ipsum"

Email:
  1. string(58) "SELECT * FROM wp_list WHERE email = lorem@ipsum.pl"

Nr telefonu: - Tu dane się wyświetlają
  1. string(53) "SELECT * FROM wp_list WHERE phone = 111222333"

Kod kuponu:
  1. string(51) "SELECT * FROM wp_list WHERE coupon = JPM7PF"


Ten post edytował ChaYim 8.03.2018, 11:47:17
Go to the top of the page
+Quote Post
nospor
post 8.03.2018, 11:48:48
Post #9





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




No i nie sadzisz, ze wartosci tekstowe nalezaloby wkladac w ciapki?

Np to zapytanie
SELECT * FROM wp_list WHERE name2 = Ipsum

powinno wygladac tak
SELECT * FROM wp_list WHERE name2 = 'Ipsum'


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ChaYim
post 8.03.2018, 12:02:57
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


Dzięki wielkie smile.gif
Kompletnie mi umknęła ta różnica między nr telefonu a resztą (liczba - string)

wystarczyło dodać:
  1. $search = "'$search'";


Wszystko działa jak należy wink.gif Jeszcze raz dzięki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 20:22