Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: lastinsertid возращает 0
Форумы портала PHP.SU » » Вопросы новичков » lastinsertid возращает 0

Страниц (1): [1]
 

1. KEFIR4UK - 08 Января, 2015 - 12:49:16 - перейти к сообщению
Нужно узнать идентификатор последеней вставленной записи в БД. Делаю с помощью lastInsertId но возвращает 0:
PHP:
скопировать код в буфер обмена
  1.  $stmt = $this->connect_db()->prepare("INSERT INTO test(email,password) VALUES(?,?)");
  2.  $stmt->bindValue(1,$this->email);
  3.  $stmt->bindValue(2,$this->password);
  4.  $stmt->execute();
  5.  $insertId=$this->connect_db()->lastInsertId();
  6.  var_dump($insertId)
;
Не пойму в чем проблема....
2. OrmaJever - 08 Января, 2015 - 13:03:26 - перейти к сообщению
а $this->connect_db() возвращает один и тот же обьект?
3. KEFIR4UK - 08 Января, 2015 - 13:06:13 - перейти к сообщению
OrmaJever пишет:
а $this->connect_db() возвращает один и тот же обьект?

да.
PHP:
скопировать код в буфер обмена
  1.  
  2.    function connect_db(){
  3.     try{
  4.           $db = new PDO("mysql:host=localhost;dbname=$this->dbname",$this->db_user_name,$this->db_user_pass);
  5.           $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  6.           return $db;
  7.         }catch(PDOExeption $e){
  8.           return$e->getMessage();
  9.         }
  10.  
  11.    }
  12.  
  13.  
  14.  
4. Мелкий - 08 Января, 2015 - 13:07:31 - перейти к сообщению
KEFIR4UK пишет:
да.

Нет. Каждый раз новый.

KEFIR4UK пишет:
return $e->getMessage();

???
5. KEFIR4UK - 08 Января, 2015 - 13:10:58 - перейти к сообщению
Мелкий пишет:
KEFIR4UK пишет:
да.

Нет. Каждый раз новый.

KEFIR4UK пишет:
return $e->getMessage();

???


Ну это же выполняется в случаи ошибки,на возврат последнего айди оно же не должно влиять,если я правильно понимаю...
6. Мелкий - 08 Января, 2015 - 13:46:13 - перейти к сообщению
Это был не имевший к теме вопрос. Зачем исключение перехватывать и инициировать вместо него fatal error? (последующее обращение к строке как к объекту)

По теме - нарекаю OrmaJever экстрасенсом. Надо ещё чего-нибудь спросить, пока он в отпуск не ушёл. connect_db возвращает каждый раз новый объект и, разумеется, last insert id будет 0.
7. KEFIR4UK - 08 Января, 2015 - 14:21:55 - перейти к сообщению
Мелкий пишет:
Зачем исключение перехватывать и инициировать вместо него fatal error?

Соединяюсь с базой без обработки исключений:

PHP:
скопировать код в буфер обмена
  1.  function connect_db(){
  2.  $db = new PDO("mysql:host=localhost;dbname=$this->dbname",$this->db_user_name,$this->db_user_pass);
  3.   $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  4.    return $db;
  5.    }

Но всеравно возвращает 0, если я туплю где то , то скажите))
8. esterio - 08 Января, 2015 - 14:23:41 - перейти к сообщению
KEFIR4UK
вы каждый раз создаете новое подключение. в таком случае last insert id всегда будет 0. Сделайте здесь синглтон и радуйтесь
9. OrmaJever - 08 Января, 2015 - 14:33:49 - перейти к сообщению

Мелкий пишет:
По теме - нарекаю OrmaJever экстрасенсом. Надо ещё чего-нибудь спросить, пока он в отпуск не ушёл

Ищу пропавшие переменные, снимаю порчу с sql запросов, защищаю ваш код от сглаза, колдую на нулях и единицах, все вопросы в пм
10. KEFIR4UK - 08 Января, 2015 - 14:44:47 - перейти к сообщению
esterio пишет:
KEFIR4UK
вы каждый раз создаете новое подключение. в таком случае last insert id всегда будет 0. Сделайте здесь синглтон и радуйтесь

Понял,спасибо!
11. esterio - 08 Января, 2015 - 14:50:39 - перейти к сообщению

OrmaJever
нужно накласть порчу на код конкурентов. сколько стоит?
12. Wooorker - 08 Января, 2015 - 18:53:28 - перейти к сообщению
KEFIR4UK пишет:
Но всеравно возвращает 0, если я туплю где то , то скажите))

Посмотри как у "Джейсон Ленгсторф - PHP и jQuery для профессионалов - 2011" реализован класс подключения.
PHP:
скопировать код в буфер обмена
  1.         protected function __construct($db=NULL){
  2.                 if (is_object($db))
  3.                 {
  4.                         $this->db=$db;
  5.                 }
  6.                 else
  7.                 {
  8.                         $dsn="mysql:host=".$db_host.";dbname=".$db_name;
  9.                         try
  10.                         {
  11.                                 $this->db = new PDO($dsn, $db_username, $db_password);

т. е. в конструкторе соединения с БД проверяем создан ли объект ранее. Если создан, то возвращаем его, если нет, то создаём новый.
13. OrmaJever - 08 Января, 2015 - 23:43:58 - перейти к сообщению
Wooorker пишет:
PHP и jQuery для профессионалов

Wooorker пишет:
реализован класс подключения

по-моему сомнительные 2 фразы. Я думаю многие проффесионалы со мной согласятся что делать класс обёртку для класса это глупость. Когда были mysql функции это было круто и оправданно, но делать класс обёртку для класса PDO немного смешно.

 

Powered by ExBB FM 1.0 RC1