2012-10-19 5 views
10

삽입 쿼리가 있는데 테이블에서 ID를 가져 오려고합니다. 나는 검색 중이며, 나는 PDO를위한 lastInsertId()를 발견했다. 그것을 사용하고 싶을 때 PHP 오류가 발생합니다. 정의되지 않은 메소드 PDO lastInsertId

내 코드입니다 :

$db = new database(); 
$naam = $db->quoteQuery($_POST['naam']); 
$barcode = $db->quoteQuery($_POST['barcode']); 
$sql = "INSERT INTO products(name, barcode) VALUES (".$name.",".$barcode.")"; 
$results = $db->executeQuery($sql); 
$lastid = $results->lastInsertId(); 

하지만이 오류를주는이 하나

Fatal error: Call to undefined method PDOStatement::lastInsertId() in /home/onlineweuh/domains/onlinewebapps.nl/public_html/vsb/admin/add-product.class.php on line 297 

내 데이터베이스 클래스 : 나는 누군가가 저를 해결하는 데 도움 수 있기를 바랍니다

class database 
{ 
    private $handleDB; 
    public function __construct() 
    { 
     $host = ; 
     $user = ; 
     $database = ; 
     $password = ; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

그것은 삽입 쿼리에서 주어진 ID를 원합니다.

답변

21

결과 개체가 아닌 PDO 개체에서 lastinsertid를 가져옵니다.

$db->lastInsertId()

편집 아래보십시오.

데이터베이스 클래스가 handleDB/PDO 객체를 캡슐화하고 있습니다. handleDB 변수가 private이기 때문에 클래스 외부에서이 변수에 액세스 할 수 없습니다. 그렇게 대중적으로 만들 필요가 있습니다.

이제
class database 
{ 
    public $handleDB; 
    public function __construct() 
    { 
     $host = 'removed'; 
     $user = 'removed'; 
     $database = 'removed'; 
     $password = 'removed'; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

} 

당신은 $db->handleDB->lastInsertId();

호출 할 수 있습니다 또는 당신은 같은 함수로 handleDB->lastInsertId() 노출 될 수 있습니다 : $db->lastInsertId();

+0

그러면 오류가 발생합니다. 정의되지 않은 메서드 데이터베이스 호출 :: lastInsertId() – Marnix

+0

이 질문이 업데이트되었습니다. –

+0

당신의 놀라운, 대단히 감사합니다. – Marnix

11

lastInsertId은 이 아니라 PDO의 방법입니다. 따라서 :

$db->lastInsertId(); 
+0

다음 오류가 나타납니다 : 정의되지 않은 메서드 데이터베이스 호출 :: lastInsertId() – Marnix

+0

'데이터베이스'확장'PDO' 있습니까? 어떤 PHP 버전을 사용하고 있습니까? – deceze

+0

내 PHP 버전은 5.2.12입니다. 시작 게시물에 PHP 데이터베이스 클래스를 배치했습니다. – Marnix

0

데이터베이스 클래스가 될 필요가 사용하는 당신은 부를 것이다

class database 
{ 
    private $handleDB; 
    public function __construct() 
    { 
     $host = 'remove'; 
     $user = 'removed'; 
     $database = 'removed'; 
     $password = 'removed'; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

    public function lastInsertId(){ 
     return $this->handleDB->lastInsertId(); 
    } 

} 

PDO를 확장하여 PDO의 하위 클래스

class database extends PDO 

그런 식으로 PDO의 모든 메소드를 서브 클래스에서 사용할 수 있습니다.

관련 문제