Только начала изучать PDO. Почитав про execute поняла, что эта функция выполняет подготовленный запрос. Во всех примерах для неё используют параметр, присутствующий в запросе. Или же предварительно используют bindParam и в этом случае оставляют execute пустым. Но на просторах сети наткнулась на пример, где execute() был пустым и без bindParam. Я так поняла, что по бОльшей части это важно для защиты от SQL-инъекций, а на выполняемость запроса это не влияет(оба кода ниже выполняются). Расскажите пожалуйста, в чём будет разница работы данной функции в обоих случаях? (Я так поняла, что это правильная форма записи) Код (Text): $dbo = new PDO( "mysql:host=$host;dbname=$database", $user, $password); $sql ="SELECT * FROM `users`"; $stmt = $dbo->prepare($sql); $stmt->execute(array($users)); while ($user = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $user['email']; } (А вот тут может быть косяк) Код (Text): $dbo = new PDO( "mysql:host=$host;dbname=$database", $user, $password); $sql ="SELECT * FROM `users`"; $stmt = $dbo->prepare($sql); $stmt->execute(); while ($user = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $user['email']; } P.S. также напрягает в первом случае, что в array($users) я явно не объявляю переменную $users. Она создаётся при запросе или я накосячила с записью?
@RastaKate, начнем с того, что ни в первом, ни во втором листинге не используются параметры. `users` - это название таблицы. Примеры использования именованных и не именованных параметров в подготовленных запросах можно посмотреть на примере метода PDO:: prepare() А более подробное описание, например, в статье: PDO tutorial, или в переводе. --- Добавлено --- И, конечно-же, переменные перед использованием желательно инициализировать, во избежание возникнования notice (как минимум, лишние записи в лог-файлах).
Да, совсем запуталась. В примерах их не объявляли. Мануал вышел довольно полезным. Фишка в том, что значение переменной посылается отдельно, поэтому без их объявления в execute или bindParam/bindValue никак...Так кошерно? Код (Text): $dsn = "mysql:host=$host;dbname=$database;charset=$charset"; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ); $dbo = new PDO($dsn, $user, $password, $opt); $usr = "quest123"; $sql ="SELECT `email` FROM `users` WHERE `name` = ?"; $stmt = $dbo->prepare($sql); $stmt->execute(array($usr)); while ($row = $stmt->fetch(PDO::FETCH_LAZY)) { echo $row['email']; }