Здравствуйте.
Помогите мне разобраться в php.
Не как не могу разобраться как работает ->
Вот на примере обращения к БД что лучше использовать
Вот это
$test = $db->prepare("INSERT INTO test (name1,name2,name3) VALUES (?,?,?)");
$test->bind_param("sss",$name1,$name2,$name3);
$test->execute();
или же лучше использовать вот это
$test = mysqli_query($db,"INSERT INTO test (name1,name2,name3) VALUES ($name1,$name2,$name3)");
Хотелось бы узнать почему именно то или иное использовать, так сказать узнать плюсы и минусы в этих запросах
Если сравнивать даже по размеру то второй вариант весит меньше чем первый
В mysqli_ тоже можно аналогично (https://www.php.net/manual/en/mysqli.prepare.php), но нет смысла использовать mysqli_ и т.п. вместо PDO.
PDO позволяет например легко поменять СУБД (например, MySQL на PostgreSQL) почти не меняя код. Ну и новее, более продуман, больше фич.
Есть экранирование специальных символов в строке для использования в SQL-выражении mysqli_real_escape_string. В PDO я так понимаю это можно заменить prepare $stmt = $db->prepare("SELECT * FROM categories WHERE id = ?");
и больше экранировать не надо этим mysqli_real_escape_string?
Да.
Он либо сам сделает это, либо (в зависимости от опции PDO::ATTR_EMULATE_PREPARES) отправит значения отдельно без вставки в строку запроса. https://phpdelusions.net/pdo#emulation
Оу
Я сейчас $smtp на $sql заменил. Так правильно же теперь стало?
$sql= $db->prepare('ТУТ ПИШЕМ ИЛИ SELECT ИЛИ INSERT'); ;
$sql->execute([$id, 1]);
$res = $sql->fetch();
Ага … кажется до меня дошло всё $db->prepare - тут мы подключаемся к БД и заодно проверяем на безопасность всяких SQL-инекций execute - это за место mysqli_query fetch - это тут что то подобное mysqli_fetch_assoc (mysqli_fetch_assoc написал как пример.)
Да, но stmt (statement, от prepared statement) более понятное имя и по привычности, и по смыслу. sql это скорее строка с запросом (кодом на языке SQL).
Я сверху не много дополнил. И по поводу stmt и sql тут могут быть любые же переменные понятные по смыслу для чего они. Просто если на одной странице несколько запросов одну переменную не очень как то использовать
Спасибо огромное за разъяснения. Пойду дальше читать и просвещаться.
Ваш форум зачет. Не на одном форуме не получал так оперативно ответы и так подробно. В закладках теперь этот форум самый первый