За последние 24 часа нас посетил 20141 программист и 1084 робота. Сейчас ищут 735 программистов ...

синтаксис для execute()

Тема в разделе "PHP и базы данных", создана пользователем RastaKate, 22 ноя 2018.

  1. RastaKate

    RastaKate Новичок

    С нами с:
    22 ноя 2018
    Сообщения:
    2
    Симпатии:
    0
    Только начала изучать PDO. Почитав про execute поняла, что эта функция выполняет подготовленный запрос. Во всех примерах для неё используют параметр, присутствующий в запросе. Или же предварительно используют bindParam и в этом случае оставляют execute пустым. Но на просторах сети наткнулась на пример, где execute() был пустым и без bindParam. Я так поняла, что по бОльшей части это важно для защиты от SQL-инъекций, а на выполняемость запроса это не влияет(оба кода ниже выполняются). Расскажите пожалуйста, в чём будет разница работы данной функции в обоих случаях?
    (Я так поняла, что это правильная форма записи)
    Код (Text):
    1. $dbo = new PDO( "mysql:host=$host;dbname=$database", $user, $password);
    2. $sql ="SELECT * FROM `users`";
    3. $stmt = $dbo->prepare($sql);
    4. $stmt->execute(array($users));
    5. while ($user = $stmt->fetch(PDO::FETCH_ASSOC))
    6. {
    7.     echo $user['email'];
    8. }
    (А вот тут может быть косяк)
    Код (Text):
    1. $dbo = new PDO( "mysql:host=$host;dbname=$database", $user, $password);
    2. $sql ="SELECT * FROM `users`";
    3. $stmt = $dbo->prepare($sql);
    4. $stmt->execute();
    5. while ($user = $stmt->fetch(PDO::FETCH_ASSOC))
    6. {
    7.     echo $user['email'];
    8. }
    P.S. также напрягает в первом случае, что в array($users) я явно не объявляю переменную $users. Она создаётся при запросе или я накосячила с записью?
     
    #1 RastaKate, 22 ноя 2018
    Последнее редактирование: 22 ноя 2018
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @RastaKate, начнем с того, что ни в первом, ни во втором листинге не используются параметры.
    `users` - это название таблицы.
    Примеры использования именованных и не именованных параметров в подготовленных запросах можно посмотреть на примере метода PDO:: prepare()
    А более подробное описание, например, в статье: PDO tutorial, или в переводе.
    --- Добавлено ---
    И, конечно-же, переменные перед использованием желательно инициализировать, во избежание возникнования notice (как минимум, лишние записи в лог-файлах).
     
  3. RastaKate

    RastaKate Новичок

    С нами с:
    22 ноя 2018
    Сообщения:
    2
    Симпатии:
    0
    Да, совсем запуталась. В примерах их не объявляли. Мануал вышел довольно полезным. Фишка в том, что значение переменной посылается отдельно, поэтому без их объявления в execute или bindParam/bindValue никак...Так кошерно?
    Код (Text):
    1. $dsn = "mysql:host=$host;dbname=$database;charset=$charset";
    2.     $opt = array(
    3.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    4.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    5.         PDO::ATTR_EMULATE_PREPARES   => false,
    6.     );
    7. $dbo = new PDO($dsn, $user, $password, $opt);
    8. $usr = "quest123";
    9. $sql ="SELECT `email` FROM `users` WHERE `name` = ?";
    10. $stmt = $dbo->prepare($sql);
    11. $stmt->execute(array($usr));
    12. while ($row = $stmt->fetch(PDO::FETCH_LAZY))
    13. {
    14.     echo $row['email'];
    15. }