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 :: Версия для печати :: Получение идентификатора последнией вставленной записи.
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Получение идентификатора последнией вставленной записи.

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

1. KEFIR4UK - 10 Февраля, 2015 - 15:12:07 - перейти к сообщению
Добрый день!Нужно плучтиь идентификатор последней вствленной записи, делал с помощью lastInsertId но метериться "Call to undefined method PDOStatement::lastInsertId()" кусок кода :
PHP:
скопировать код в буфер обмена
  1.  
  2.                 if($this->validate()){
  3.                         $db_obj=Database::getInstance();
  4.                         $dbh=$db_obj->connect()->prepare("INSERT INTO $this->table(email,pass) VALUES(?,?)");
  5.                         $dbh->bindParam(1,$this->email);
  6.                         $dbh->bindParam(2,$this->password);
  7.                         $dbh->execute();
  8.                         session_start();
  9.                                 $_SESSION['id_user']=$dbh->lastInsertId();
  10.                        
  11.                 }
  12.  

Матерится на 9 строчке.Класс Database - соединаеться с базой
вот он сам:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Database{
  3.         static private $Instance = NULL;
  4.         public $dbh;
  5.         private $host="localhost";
  6.         private $user="root";
  7.         private $password="";
  8.         private $db="testdb";
  9.         protected function __clone() {}
  10.         protected function __construct() {}
  11.         static public function getInstance(){
  12.                 if(self::$Instance ==NULL){
  13.                         self::$Instance = new Database();      
  14.                 }
  15.                 return self::$Instance;
  16.         }      
  17.                 function connect(){
  18.                 try{
  19.                  $this->dbh=new PDO("mysql:host=$this->host;dbname=$this->db",$this->user,$this->password);
  20.                 $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21.                 $this->dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
  22.                 eturn $this->dbh;
  23.                         }catch(PDOException $e){
  24.                                 die($e->getMessage());
  25.                         }      
  26.                 }
  27. }
  28.  

Подозреваю что ошибка в етом классе, но понять не могу где
2. Zuldek - 10 Февраля, 2015 - 15:15:45 - перейти к сообщению
PDO::lastInsertId();
3. KEFIR4UK - 10 Февраля, 2015 - 15:17:42 - перейти к сообщению
Zuldek пишет:
dbh::lastInsertId
тоже самое
4. Bio man - 10 Февраля, 2015 - 15:27:31 - перейти к сообщению
Так это же свойство PDO а не PDOStatement. Читайте внимательно доки
5. KEFIR4UK - 10 Февраля, 2015 - 16:12:58 - перейти к сообщению
Bio man пишет:
Так это же свойство PDO а не PDOStatement. Читайте внимательно доки

Сделал так $db_obj->lastInsertId(); но теперь говорит что нет та ткого метода в класса Database. Создал
такой метод
function lastInsertId(){
$this->dbh->lastInsertId();
}
Но теперь возвращает NULL а не ошибку
6. Мелкий - 10 Февраля, 2015 - 16:15:10 - перейти к сообщению
KEFIR4UK пишет:
такой метод
function lastInsertId(){
$this->dbh->lastInsertId();
}

Так он ничего и не возвращает.
7. KEFIR4UK - 10 Февраля, 2015 - 16:20:04 - перейти к сообщению
Не могу понять где туплю Нахмурился
8. Мелкий - 10 Февраля, 2015 - 16:27:13 - перейти к сообщению
Так сходите погулять/попить чаю/поспать/etc
Есть в коде этого метода недостаток одного слова, и слово это return.
9. KEFIR4UK - 10 Февраля, 2015 - 16:49:49 - перейти к сообщению
Мелкий пишет:
и слово это return
Убрал по очереди два ретурна но тогда не видит другиг методов класса=/
10. Sail - 10 Февраля, 2015 - 16:55:13 - перейти к сообщению
KEFIR4UK пишет:
Убрал по очереди два ретурна но тогда не видит другиг методов класса=/

Почему убрал?! Добавлять надо... в метод, который lastinsertid не возвращает.
И, кстати, там в одном месте в коде первого сообщения 'r' в этом волшебном слове пропущена...
11. KEFIR4UK - 10 Февраля, 2015 - 17:11:18 - перейти к сообщению
Недочет....спасибо Sail!

 

Powered by ExBB FM 1.0 RC1