php यवस कैसे Zend_Db का उपयोग कर एक Sqlite डेटाबेस का आखिरी डाला आईडी प्राप्त करने के लिए




हिंदी में डेटाबेस डिजाइन की प्रक्रिया (4)

पीडीओ :: lastInserId ()

देखें: http://us2.php.net/manual/en/pdo.lastinsertid.php

मैं अपने PHP अनुप्रयोग में एक स्क्लिट डीबी की आखिरी डाली गई पंक्ति आईडी लाने की कोशिश कर रहा हूं। मैं डेटाबेस हैंडलिंग के लिए ज़ेंड फ्रेमवर्क के PDO Sqlite एडाप्टर का उपयोग कर रहा हूँ। अंतिम इन्सर्टआईडी () विधि मुझे परिणाम देने के लिए माना जाता है, लेकिन यह नहीं होगा। पीडीओ दस्तावेज़ीकरण में php.net में मैंने पढ़ा है कि अंतिम आईएनएसएआरआईडी () सभी डेटाबेस पर समान कार्य नहीं करेगा। लेकिन क्या यह सिकलाइट पर बिल्कुल काम नहीं करेगा? मैंने अडैप्टर की आखिरी इंडसइंडआईडी () विधि को अधिलेखित करने की कोशिश की:

// Zend_Db_Adapter_Pdo_Sqlite
public function lastInsertId() {
    $result = $this->_connection->query('SELECT last_insert_rowid()')->fetch();
    return $result[0];
}

लेकिन यह या तो काम नहीं करता है बस हर बार मैं इसे फोन करता हूं। क्या अंतिम सम्मिलित आईडी ढूंढने के लिए कोई विशेष साफ तरीका है?


प्रयोग नहीं करें

SELECT * FROM tablename WHERE id = (SELECT COUNT(*) FROM tablename);

इसके बजाय उपयोग करें

SELECT MAX(id) as id FROM tablename LIMIT 1;

या

SELECT id FROM tablename ORDER DESC LIMIT 1;

तालिका के साथ एक SQLite3 डेटाबेस को देखते हुए, निम्नानुसार है:

BEGIN TRANSACTION;
CREATE TABLE b(a integer primary key autoincrement, b varchar(1));
COMMIT;

यह कोड मुझे lastInsertId देता है:

public function lastInsertId() {
    $result = $this->_connection->query('SELECT last_insert_rowid() as last_insert_rowid')->fetch();
    return $result['last_insert_rowid'];
}

यही है - अगर आपकी तालिका सही ढंग से परिभाषित है, तो आपकी एकमात्र समस्या होने की संभावना है कि आपने कुंजी $ परिणाम प्राप्त करने की कोशिश की [0] - जब भी आप एक गणना की गई कॉलम का उपयोग कर रहे हैं, मैं "एएस" खोजशब्द जैसा मैंने ऊपर दिखाया है यदि आप स्तंभ को उपनाम नहीं करना चाहते हैं, तो SQLite3 में कॉलम का नाम "last_insert_rowid ()" होना चाहिए


SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1




zend-db