Добрый день. С хранимыми процедурами сталкиваюсь впервые и столкнулся с ошибкой которую никак не могу понять. Есть вот такой запрос. Алгоритм(насколько я понимаю таков)-создал запрос и записал его на сервер,потом в этот запрос передаю параметры-выполняю запрос. Но мне выдает ошибку Call to a member function bind_param() on a non-object. Я понимаю что получается что я не передаю объект в bind_param() (мне возвращает false), но не могу понять как исправить. Помогите пож-та. Код (Text): $sql="insert into `users` (`name`,`surname`,`login`) values (:name,:surname,:login)" or die($this->db->error); $sth=$this->db->prepare($sql); $sth->bind_param(':name', $this->db->real_escape_string($data['name'])); $sth->bind_param(':surname', $this->db->real_escape_string($data['surname'])); $sth->bind_param(':login', $this->db->real_escape_string($data['login'])); $sth->execute();
напутал сори Добавлено спустя 45 минут 3 секунды: хорошо объясняется. лучше чем на пхп.нет мануале.сделал все как в примере но ошибка осталась Код (Text): $sql="insert into `users` values (?,?,?)" or die($this->db->error); $stmt=$this->db->prepare($sql); $stmt->bind_param('sss',$name,$surname,$login); $name=$this->db->real_escape_string($data['name']); $surname=$this->db->real_escape_string($data['surname']); $login=$this->db->real_escape_string($data['login']); $stmt->execute();
Может prepare FALSE возвращает? После $stmt=$this->db->prepare($sql); что в $stmt? Читай ещё раз http://phpfaq.ru/debug если ругается что нет ->bind_param а предполагали в $stmt statement object , а его там нет , с низу в верх ищем ошибку ДО упора перепроверяя каждую лексему и входящие и возвращаемые параметры и последовательность. Нужна точность на 100%, кропотливый труд, перепроверка всего и интерпретация php кода в голове. https://php.net/manual/ru/mysqli.prepare.php
prepare возвращает false. Я понимаю что тут все можно решить легко без всякихвсяких подготавливаемых вопросов,но любопытсво берет вверх. А я так понимаю smtp может у меня false только если есть ошибка в запросе sql. Но сам запрос правильный,насколько я понимаю
gix, посмотри функции mysqli там есть которые сообщают были ошибки или нет, очень удобно. Их можно вызвать после запроса который хочешь проверить.
ошибку решил. суть в том что когда запрос $sql="insert into `users` values (?,?,?)" без указания конкретных полей куда нужно загружать инфу, то подразумевается что вставка должна быть в каждое поле. У меня же в таблице полей 10, а я хотел вставить 8 значений. Вообщем просто прописал конкретные поля куда вставлять $sql=("insert into users(name,surname,login,password,email,country,city,avatar) VALUES (?,?,?,?,?,?,?,?)");