• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed PDO - Proste zapytanie Select

Object Storage Arubacloud
0 głosów
349 wizyt
pytanie zadane 12 maja 2020 w SQL, bazy danych przez Bakkit Dyskutant (7,600 p.)
zamknięte 13 maja 2020 przez Bakkit
Witam, do tej pory nie korzystałem z biblioteki PDO, wszelkie zapytania tworzyłem za pomocy mysqli. Oglądnąłem poradnik Mirosława Zelenta. Chciałbym zapytać czy jeśli chcę wyciągnąć i wyświetlić tekst na stronie zapisany w bazie danych to muszę go bindować czy po prostu go wyświetlić? Jeśli tak to prosiłbym o przykładowy kod. Pozdrawiam!
komentarz zamknięcia: Rozwiązanie problemu.

1 odpowiedź

+2 głosów
odpowiedź 12 maja 2020 przez eunstachy Stary wyjadacz (14,180 p.)
wybrane 13 maja 2020 przez Bakkit
 
Najlepsza

Wszystko zależy od zapytania SQL. Jeśli robisz proste zapytanie wyświetlające wszystkie dane z tabeli np:

SELECT * FROM users

To nic nie trzeba tu bindować. 

Problem pojawi się, gdy część zapytania SQL będzie zawierała dane od użytkownika. Jak wiadomo nigdy nie można ufać takim danym. Załóżmy więc, że użytkownik podaje nick osoby zarejestrowanej na stronie, a w odpowiedzi otrzymuje jego email. Zapytanie będzie wyglądało w ten sposób:

SELECT email FROM users WHERE user_name = :user_name

gdzie :user_name będzie wartością podaną przez użytkownika (np za pomocą jakiegoś formularza). 

Do bindowania możesz użyć metody 

bindParam

lub

bindValue

Różnią się one właściwie tylko jedną rzeczą. W przypadku 

bindParam

dane są przekazywane jako referencja. Tutaj dokładny opis o co chodzi.Warto znać tą różnicę aby uniknąć dziwnych błędów. Jako referencję możesz podać zmienną, nie możesz natomiast podać stringu lub wyniku działania funkcji.

Tak więc taki kod będzie błędny:

$stmt->bindParam(':user_name', 'Adam Małysz', PDO::PARAM_STR);

Ten również:

$stmt->bindParam(':user_name', get_user_name(), PDO::PARAM_STR);

Przechodząc do sedna:

Mamy powyższy przykład, gdzie użytkownik chce otrzymać email innego użytkownika. Przygotowujesz połączenie z bazą (host, nazwa bazy, użytkownik, hasło) dodatkowo zakładam, że nazwa użytkownika jest przesłana z formularza metodą POST:

$host = '127.0.0.1';
$db   = 'db_name';
$user = 'db_user';
$pass = 'db_pass';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$user_name = $_POST['user_name'];

$pdo = new PDO($dsn, $user, $pass);

Następnie przygotowujesz zapytanie:

$stmt = $pdo->prepare('SELECT email FROM users WHERE user_name = :user_name');

Następnie naszą zmienną $user_name należy stawić do zapytania gdzie zastąpi ona :user_name. Robi się to wcześniej wspomnianą metodą bindParam lub bindValue.

$stmt->bindParam(":user_name", $user_name, PDO::PARAM_STR);

Jako pierwszy argument podajemy co ma zostać zastąpione, jako drugi jaka ma być wartość, natomiast trzeci parametr to typ danych, w tym przypadku będzie to string. Tutaj lista innych typów zmiennych których być może będziesz używał w przyszłości.

Na końcu pozostaje już tylko wyświetlić pobrane dane :)

komentarz 13 maja 2020 przez Bakkit Dyskutant (7,600 p.)
Dla takich pełnych odpowiedzi warto żyć ;) Dzięki wielkie!

Podobne pytania

0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 31 stycznia 2020 w SQL, bazy danych przez bwl Obywatel (1,530 p.)
0 głosów
3 odpowiedzi 561 wizyt
0 głosów
2 odpowiedzi 3,080 wizyt
pytanie zadane 10 grudnia 2016 w PHP przez niezalogowany

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...