2012-10-19 15 views
10

मेरे पास एक सम्मिलित क्वेरी है, और मैं तालिका से आईडी प्राप्त करना चाहता हूं। मैं खोज कर रहा हूं, और मुझे पीडीओ के लिए lastInsertId() मिला। जब मैं इसका उपयोग करना चाहता हूं, तो मुझे PHP त्रुटियां मिलती हैं।अपरिभाषित विधि पीडीओ 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); 
    } 

मुझे आशा है कि कोई मुझे सुलझाने में मदद कर सकते हैं यह, मैं आईडी चाहता हूं जो सम्मिलित क्वेरी पर दिया गया है।

उत्तर

21

आपको पीडीओ ऑब्जेक्ट से अंतिम प्रविष्टि मिलती है न कि आपके परिणाम वस्तु।

$db->lastInsertId()

संपादित नीचे की कोशिश करो।

आपकी डेटाबेस कक्षा आपके हैंडल डीबी/पीडीओ ऑब्जेक्ट को समाहित कर रही है। चूंकि हैंडल डीबी चर निजी है, इसलिए आप अपनी कक्षा के बाहर इस तक नहीं पहुंच सकते हैं। आपको या तो इसे सार्वजनिक बनाना होगा;

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() का पर्दाफाश हो सकता है:

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(); 
    } 

} 

का उपयोग कर $db->lastInsertId();

+0

फिर मुझे त्रुटि मिल रही है: अपरिभाषित विधि डेटाबेस पर कॉल करें :: lastInsertId() – Marnix

+0

मैंने आपके लिए यह प्रश्न अपडेट किया है। –

+0

आपका अद्भुत, बहुत बहुत धन्यवाद। – Marnix

11

lastInsertIdPDO का एक तरीका है, PDOStatement नहीं। इसलिए:

$db->lastInsertId(); 
+0

फिर मुझे त्रुटि मिल रही है: अपरिभाषित विधि डेटाबेस पर कॉल करें :: lastInsertId() – Marnix

+0

क्या 'डेटाबेस'' पीडीओ 'बढ़ाता है? आप किस PHP संस्करण पर हैं? – deceze

+0

मेरा PHP संस्करण है: 5.2.12। मैंने शुरुआती पोस्ट में अपना PHP डेटाबेस क्लास रखा है। – Marnix

0

अपने डेटाबेस वर्ग एक होने की जरूरत है आप कहेंगे पीडीओ

बढ़ाकर पीडीओ का उप-वर्ग 0
class database extends PDO 

इस तरह पीडीओ में सभी विधियां आपके उप-वर्ग में उपलब्ध हैं।

संबंधित मुद्दे