Как обычно, я просматривал лучшие практики работы с PHP, и подготовленные операторы кажутся теми вещами, которые я теперь должен делать с закрытыми глазами. Поэтому я начал играть с некоторыми примерами, которые я нашел.
У меня такая ошибка при запуске скрипта:
Неустранимая ошибка: вызов функции-члена bindParam() для не-объекта в /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php в строке 10
Вот и код.
Вставить простой метод.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
config.php
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
Не уверен, что я здесь делаю неправильно, это аналогичный пример, найденный на php.net, почему он не работает? PS: я думаю, что соединение mysqli не является проблемой, потому что я использовал его для выполнения некоторых подготовленных операторов с помощью команд SELECT SQL. И работал довольно хорошо.
ИЗМЕНИТЬ
Резолюция и почему.
Что ж, в примере я должен использовать bind_param()
для каждого значения в запросе. Но благодаря Барту ему удалось решить проблему с моим кодом.
Где это:
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
Должно быть:
$stmt->bind_param("sii", $nome, $telefone, $bi);
Теперь для тех, кому может быть интересно, что такое «sii».
Что ж, bind_param для того, что я вижу, привязывает «$ var» к каждому вопросительному знаку «?» чтобы.
Таким образом, с одним bind_param()
я могу связать их все одновременно, а обычное использование bind_param()
требует указания типа связываемых данных.
Мое первое значение, которое нужно привязать, это $nome
строка, указанная с помощью "s";
А остальные $telefone
и $bi
являются целыми числами, потому что у него есть "i";
Для других, у которых есть аналогичная проблема, здесь используются другие типы данных (из php.net).
я = целое число;
с = строка;
г = двойной;
б = капля;
Если кто-то в качестве лучшего объяснения, пожалуйста, напишите или прокомментируйте. Так что я могу улучшить свои собственные.
Спасибо.