Mysqli подготовил заявление в bindParam() не работает
как обычно, я просматривал лучшие практики с PHP, и подготовленные заявления кажутся такими вещами, которые я должен теперь делать с закрытыми глазами. Поэтому я начал играть с некоторыми примерами, которые я нашел.
у меня есть эта ошибка при запуске скрипта:
неустранимая ошибка: вызов функции-члена bindParam() на не-объект в каталог /opt/lampp/htdocs в/phpSecurity/PreparedStatments/вставка-мульти-сначало-параметры/вставка простой метод.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();
?>
конфигурации.в 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
являются целыми числами для того, что у него есть "я";
для других, у которых есть аналогичная проблема, здесь идут другие данные типы (от php.net).
i = целое число;
ы = строка;
d = двойной;
b = Blob;
если кто-то в качестве лучшего объяснения пожалуйста пост или комментарий. Чтобы я мог улучшить свой собственный.
спасибо.
2 ответов
вы можете подумать, что нет ничего плохого в соединении, но вы должны проверить, чтобы убедиться:
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
if (mysqli_connect_errno()) {
printf("DB error: %s", mysqli_connect_error());
exit();
}
EDIT:
что происходит, когда вы делаете:
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$stmt->bind_param("sii", $nome, $telefone, $bi);
$stmt->execute();
?
таблица coisas
правильно пишется?
сделайте print_r на $stmt после того, как вы вернете его в строку 4. Это реальный объект? Полагаю, нет.