Automatyczne umieszczanie placeholderów w cudzysłowach w PDO w PHP
Technicznie rzecz biorąc, PDO wszystkie wstawiane wartości umieszcza w cudzysłowach, traktując je jako ciągi znaków, nawet jeśli faktycznie są to liczby. Jest to dopuszczalne przez składnię SQL. Dlatego placeholderów nie trzeba umieszczać w cudzysłowach, jeśli masz wartość typu string.
Spójrzmy na przykład. Załóżmy, że w zmiennej przechowywany jest ciąg znaków:
<?php
$name = 'name1';
?>
Pozycjonalnego placeholder'a nie trzeba umieszczać w cudzysłowie w tym przypadku:
<?php
$sql = 'SELECT * FROM users WHERE name=?';
$res = $pdo->prepare();
$res->execute([$name]);
?>
Named placeholder'a również nie trzeba umieszczać w cudzysłowie:
<?php
$sql = 'SELECT * FROM users WHERE name=:name';
$res = $pdo->prepare();
$res->execute(['name' => $name]);
?>
To, że w zapytaniu zawsze będą ciągi znaków, niemniej czasami może prowadzić do problemów ze składnią SQL - tam, gdzie zgodnie ze składnią wymagane są liczby. W tym przypadku można skorzystać z alternatywnego sposobu wiązania parametrów, który omówimy w kolejnych lekcjach.