За последние 24 часа нас посетили 40765 программистов и 1750 роботов. Сейчас ищут 748 программистов ...

Подготавливаемые запросы

Тема в разделе "MySQL", создана пользователем gix, 27 янв 2015.

  1. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    Добрый день. С хранимыми процедурами сталкиваюсь впервые и столкнулся с ошибкой которую никак не могу понять. Есть вот такой запрос. Алгоритм(насколько я понимаю таков)-создал запрос и записал его на сервер,потом в этот запрос передаю параметры-выполняю запрос. Но мне выдает ошибку Call to a member function bind_param() on a non-object. Я понимаю что получается что я не передаю объект в bind_param() (мне возвращает false), но не могу понять как исправить. Помогите пож-та.
    Код (Text):
    1.  
    2. $sql="insert into `users` (`name`,`surname`,`login`)
    3.             values (:name,:surname,:login)" or die($this->db->error);
    4.             $sth=$this->db->prepare($sql);
    5. $sth->bind_param(':name', $this->db->real_escape_string($data['name']));
    6.             $sth->bind_param(':surname', $this->db->real_escape_string($data['surname']));
    7.             $sth->bind_param(':login', $this->db->real_escape_string($data['login']));
    8. $sth->execute();
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а где же тут хранимые процедуры?
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    напутал сори

    Добавлено спустя 45 минут 3 секунды:
    хорошо объясняется. лучше чем на пхп.нет мануале.сделал все как в примере но ошибка осталась
    Код (Text):
    1.  
    2. $sql="insert into `users` values (?,?,?)" or die($this->db->error);
    3.             $stmt=$this->db->prepare($sql);
    4.             $stmt->bind_param('sss',$name,$surname,$login);
    5.         $name=$this->db->real_escape_string($data['name']);
    6.         $surname=$this->db->real_escape_string($data['surname']);
    7.         $login=$this->db->real_escape_string($data['login']);
    8. $stmt->execute();
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может 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
     
  6. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    prepare возвращает false. Я понимаю что тут все можно решить легко без всякихвсяких подготавливаемых вопросов,но любопытсво берет вверх. А я так понимаю smtp может у меня false только если есть ошибка в запросе sql. Но сам запрос правильный,насколько я понимаю
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    gix, посмотри функции mysqli там есть которые сообщают были ошибки или нет, очень удобно. Их можно вызвать после запроса который хочешь проверить.
     
  8. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    ошибку решил. суть в том что когда запрос $sql="insert into `users` values (?,?,?)" без указания конкретных полей куда нужно загружать инфу, то подразумевается что вставка должна быть в каждое поле. У меня же в таблице полей 10, а я хотел вставить 8 значений. Вообщем просто прописал конкретные поля куда вставлять $sql=("insert into users(name,surname,login,password,email,country,city,avatar) VALUES (?,?,?,?,?,?,?,?)");