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 :)