2009-07-24 17 views
9

मुझे pdo के साथ sqlite3 डेटाबेस में डालने में कुछ परेशानी हो रही है। आपको पीडीओ के साथ अपनी अज्ञानता का बहाना पड़ेगा, ऐसा लगता है कि पाइथन के डेटाबेस इंटरफ़ेस से ऐसा विदेशी आ रहा है।मैं पीडीओ (sqllite3) में कैसे सम्मिलित करूं?

तो मेरी समस्या यहां है।

$dbh = new PDO('sqlite:vets.db'); 
    $count = $dbh->exec("INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"); 
    $dbh = null; 

मैं बस अपना डेटाबेस पर कि SQL आदेश पर अमल करने और इसके साथ किया जाना चाहते हैं: मैं एक साधारण डालने की है। हालांकि इस स्क्रिप्ट को निष्पादित करने में कोई त्रुटि नहीं होती है, यह डेटाबेस को अद्यतन नहीं करता है। मैंने डेटाबेस पर सभी प्रकार की अनुमतियों का प्रयास किया है, यहां तक ​​कि इसे 777 भी बनाया है, लेकिन इससे कोई फर्क नहीं पड़ता है।

क्या कोई मेरी मदद कर सकता है?

+0

बस के रूप में एक sidenote (शायद आपकी समस्या से संबंधित नहीं हो सकता है), क्या आपने क्वेरी में इंजेक्शन वाले डेटा से बचने के बारे में सोचा है? (पीडीओ :: उद्धरण देखें); या तैयार बयानों का उपयोग (पीडीओ देखें :: तैयार + पीडीओ :: निष्पादित करें)। क्या आपने जांच की कोशिश की कि कोई एसक्यूएल त्रुटि नहीं थी? (http://php.net/manual/fr/pdo.errorinfo.php देखें) –

+0

क्या आपके पास पीडीओ स्क्लाइट एडाप्टर के साथ अन्य सफल प्रश्न हैं? – sixthgear

+0

इसके अलावा, आपके पास प्रत्येक मान के आस-पास आपके SQL कथन में कोई उद्धरण चिह्न नहीं है। (बेशक प्रत्येक चर में उद्धरण निहित नहीं हैं) – sixthgear

उत्तर

21

पीडीओ के महान लाभों में से एक यह है कि आप तैयार बयान तैयार कर सकते हैं। यहाँ मेरा एक पीएचपी परियोजना से कुछ कोड है:

$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)'); 
$qry->execute(array($path, $name, $message)); 

आप देख सकते हैं, मैं ? का उपयोग जहाँ मैं एक मूल्य सम्मिलित करना चाहते हैं, तो मैं मान की एक सरणी है कि के स्थान पर रखा जाना चाहिए के साथ क्वेरी को निष्पादित प्रश्न चिह्न

आप ऐसा करते हैं, तो आपकी क्वेरी ज्यादा सुरक्षित, और अधिक काम करने के लिए की संभावना होगी (के बाद से एक लापता मूल्य यदि आप क्वेरी में सीधे वैरिएबल प्रविष्ट की तरह तुम क्या काम करने से आपकी क्वेरी बंद कर देंगे।)

+0

मेरे लिए इसे साफ़ करने के लिए बहुत बहुत धन्यवाद। मैं इन तैयार बयानों को वास्तव में समझ नहीं पाया। धन्यवाद! – kodai

+0

मैं कभी याद नहीं कर सकता कि यह क्यों मांग करता है कि पैरामीटर एक सरणी() में लपेटा जाए (यहां तक ​​कि एक परम के लिए भी!)। पैरामीटर की सूची क्यों न स्वीकार करें? –

+1

अच्छा सवाल ... पीडीओ के लिए अंतर्निहित पुस्तकालय की तरह समर्थन/व्यवहार करने की संभावना है। यह निश्चित रूप से संभव है, क्योंकि PHP तर्कों की एक चर संख्या का समर्थन करता है। आप अपने स्वयं के उप-वर्ग को 'निष्पादित 'के साथ बना सकते हैं जो' parent :: execute (func_get_args()) ' – Blixt

2

आपको अपनी SQL क्वेरी में कोई त्रुटि हो सकती है। आप इसे प्रिंट कर सकते हैं और फिर इसे कुछ SQLite GUI इंटरफ़ेस में निष्पादित करने का प्रयास करें जैसे SQLite Database Browser

// you can skip PDO part for now, because we know it doesn't work 
// $dbh = new PDO('sqlite:vets.db'); 
$query = "INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"; 
echo $query; 
// $count = $dbh->exec($query); 
// $dbh = null; 

मुझे लगता है कि आप उद्धरण में अपने मूल्यों लपेटकर नहीं कर रहे हैं, शायद उस समस्या के स्रोत है। शायद टेबल फ़ील्ड नामों में कुछ टाइपो भी। एक बार जब आप वास्तव में क्वेरी देखते हैं तो सभी बाहर आ जाएंगे।

+1

आप सही थे, मैं अपना डेटा उद्धृत करना भूल गया था। धन्यवाद। – kodai

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