2011-06-09 13 views
8

विफल रहता है मुझे किसी MySQL तालिका में रिकॉर्ड डालने के लिए कुछ सरल PHP कोड की समस्या निवारण में समस्याएं आ रही हैं।MySQL डीबी में डालने के लिए PHP पीडीओ कोड

इस कोड WAMP में सीधे प्रवेश किया ठीक काम करता है:

INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','[email protected]') 

इस PHP कोड काम नहीं करता:

<?php 
    $dbHost="localhost"; 
    $dbName="project"; 
    $dbUser="admin"; 
    $dbPassword="abcd"; 
    $dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword); 
    print_r($dbh); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)"); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query->bindValue(1, 'apple'); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query->bindValue(2, '[email protected]'); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $inserted=$query->execute(); //True if succesful, False if not. 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 
    echo "</br>"; 
    if ($inserted){print_r("true");}else{print_r("false");}; 
?> 

क्या मैं जब मैं पेज पर अमल निम्नलिखित प्रिंटआउट है:

PDO Object () 
Array ([0] => [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(5) "3D000" [1]=> int(1046) [2]=> string(20) "No database selected" } 
3D000 
Array ([0] => 00000 [1] => [2] =>) 
false 

रिकॉर्ड डीबी में डाला नहीं गया है। क्या मैं गलत हूं? मुझे यकीन नहीं है कि मुझे print_r में क्या देखना चाहिए, मैं उन्हें उत्तरदाताओं के लिए सहायता प्रदान कर रहा हूं।

धन्यवाद,

JDelage

संपादित - मैं print_r की टिप्पणी में सिफारिश की गयी।

यहाँ है कि मैं क्या WAMP में देखते हैं:

http://jdelage.public.s3.amazonaws.com/project_sch.jpg

+4

आपके द्वारा चलाए जा कोशिश कर सके 'print_r ($ dbh-> errorInfo());' कनेक्शन और क्वेरी के बाद? यह कुछ उपयोगी डीबगिंग जानकारी देना चाहिए। – lonesomeday

+1

सभी प्रिंट स्टेटमेंट्स के बजाय आपको यहां क्या करना है, '$ query' do' var_dump ($ query-> errorInfo()) की त्रुटि स्थिति की जांच करना है; 'और '$ query-> errorCode()' –

+0

जांचें मैंने कोड को संशोधित करने के लिए संशोधित किया है। – JDelage

उत्तर

4

त्रुटि संदेश संकेत मिलता है कि आप डीबी ठीक से कनेक्ट किए गए लगता है, लेकिन इस परियोजना डेटाबेस का चयन नहीं किया गया है कि।

यकीन है कि यह सही DSN साथ दूर करने के लिए कोशिश कर रहा है होना करने के लिए मैं नहीं बल्कि चर से सीधे मूल्यों को रोकने के लिए, कनेक्शन स्ट्रिंग, यानी बदलते कोशिश करना चाहते हैं,:,

'mysql:host=localhost;dbname=project' 

यह एक फर्क नहीं करना चाहिए लेकिन यह जांच के लायक है।

यदि यह काम नहीं करता है, और चूंकि आप MySQL से कनेक्ट करने में सक्षम होने लगते हैं, तो क्वेरी के भाग के रूप में डेटाबेस नाम को शामिल करने के लिए एक वर्कअराउंड हो सकता है। इसलिए उपरोक्त आपकी क्वेरी बन जाएगा:

$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)"); 
+0

"इन्टरनेट इन यूजर ..." को "प्रोजेक्ट.यूसर में शामिल करें ..." के साथ बदलता है। धन्यवाद - लेकिन मुझे कहना है कि मैं अभी भी समस्या को समझ नहीं पा रहा हूं .... – JDelage

1

बहुत अजीब समस्या है, ऐसा लगता है कि आप छोटे अक्षरों में dbname दर्ज करने के लिए इसे सही ढंग से डेटाबेस से कनेक्ट करने के लिए की जरूरत है।

तो यह होना चाहिए:

mysql:host=$dbHost;dbname=$dbName 
संबंधित मुद्दे