2012-06-15 9 views
12

काम नहीं कर रहा है मैं अपने कोडइग्निटर एप्लिकेशन में पीडीओ MySQL ड्राइवर का उपयोग करने की कोशिश कर रहा हूं। यह मेरा डेटाबेस config है:कोडइग्निटर पीडीओ डेटाबेस ड्राइवर

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = ''; 
$db['default']['database'] = 'testdatabase'; 
$db['default']['dbdriver'] = 'pdo'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

हालांकि, जब मैं एक नियंत्रक लोड मैं इस त्रुटि हो रही है:

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in C:\xampp\htdocs\testsite\system\database\drivers\pdo\pdo_driver.php:114

मैं pdo_driver.php में die($this->hostname); का उपयोग कर डेटा स्रोत की जाँच की है और यह के रूप में बाहर आ रहा है :

localhost;dbname=testdatabase 

इसलिए यह सही डेटाबेस नाम प्राप्त कर रहा है। डेटाबेस मौजूद है और मेरे पास MySQL चल रहा है।

क्या गलत हो सकता है? धन्यवाद।

+1

Sidenote: मैं हाल ही में नए संस्करण (2.1.1) के लिए बदलाव का पढ़ सकते हैं और वहाँ पीडीओ चालक के बारे में कुछ bugfixes हैं। आप इसे –

+0

मार्टिन की जांच करना चाहेंगे, मुझे एक ही त्रुटि मिल रही है: 'घातक त्रुटि: संदेश के साथ अपूर्ण अपवाद' पीडीओएक्सप्शन 'में' ड्राइवर नहीं मिला '... ((कई डेटाबेस और कोर डीआईआर/फ़ाइलें सूचीबद्ध))। .. लाइन 114' पर syetem/डेटाबेस/ड्राइवर/pdo/pdo_driver.php। मैं इतना नया हूं कि मैं यह भी नहीं बता सकता कि आपका हैक मेरी मदद करेगा या नहीं। कहां और क्या ** आपने ** .../system/डेटाबेस/ड्राइवर/pdo/pdo_driver.php' में संपादित किया था? मैं विन्यास विषयों पर सुंदर नौसिखिया हूँ। मुझे लगता है कि सीआई v.1.1.1 में पीडीओ काम करने के लिए सिस्टम फ़ाइल में एक हैक की आवश्यकता है, है ना? क्यों (अनुमानतः सबसे अधिक) दूसरों को आपके द्वारा उल्लेख किए गए हैक की आवश्यकता नहीं है? – govinda

+0

@ गोविंदा, मैंने क्लास कन्स्ट्रक्टर में 'else {...}' के ठीक बाद 81 लाइन पर मेरा किया था। यह अजीब लगता है कि आपको इसे बिल्कुल हैक करने की ज़रूरत है लेकिन मुझे ठीक होने के बाद इसमें कुछ भी गलत नहीं मिला है। –

उत्तर

8

यह मामला नहीं होना चाहिए।

localhost;dbname=testdatabase 

mysql:dbname=testdatabase;host=localhost; 
+1

धन्यवाद, मैंने कोडइग्निटर पीडीओ ड्राइवर को इस पर संशोधित किया: '$ this-> hostname = 'mysql: dbname ='। $ This-> डेटाबेस। '; होस्ट =' $ $-> होस्टनाम; 'और ऐसा लगता है कि यह काम करता है अभी व। :) –

+3

कोर ड्राइवर को संशोधित करना अनावश्यक है, और अगली बार जब आप सीआई अपडेट करेंगे तो आपको तब तक तोड़ दिया जाएगा जब तक आप कोर फ़ाइल में बदलाव को याद नहीं करते। इसके बजाय नीचे अपना दृष्टिकोण लें, अपनी डेटाबेस सेटिंग्स फ़ाइल को संपादित करें। – PaulSkinner

30

फ़ाइल पर होना चाहिए /application/config/database.php जहां

$db['default']['hostname'] = 'localhost'; 

होना चाहिए है

$db['default']['hostname'] = 'mysql:host=localhost'; 

लोकलहोस्ट या आपके डेटाबेस होस्ट।

+2

+1 - इसे कहीं भी नहीं मिला, आप चट्टान! – Chris

+1

दोह। बेशक यह चाहिए। मैंने बस अनुमान लगाया कि सीआई बल्ले से इसे संभालेगा। – PaulSkinner

1
CodeIgniter के Database Configuration पेज के अनुसार

,

पीडीओ चालक के लिए, आप 'hostname => 'localhost'' करने के लिए "'hostname' => mysql:host=localhost" नीचे की तरह बदलना चाहिए:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysql:host=localhost', 
    'username' => 'root', 
    'password' => '', 
    'database' => 'database_name', 
    'dbdriver' => 'pdo', 
    'dbprefix' => '', 
    'pconnect' => FALSE, 
    'db_debug' => (ENVIRONMENT !== 'production'), 
    ..... 
    ..... 
); 
6

पीडीओ चालक एक पूर्ण DSN की आवश्यकता होती है प्रदान की जाने वाली स्ट्रिंग। स्ट्रिंग इस

'dsn' = ‘mysql:host=localhost;dbname=databasename’; 

जैसे कि जब आप इस स्ट्रिंग का उपयोग आप मेजबान और सरणी से databasename मूल्य निकाल देना चाहिए। मुझे लगता है कि निम्नलिखित उदाहरण आपको एक विचार देता है।

$db['default'] = array(
'dsn' => 'mysql:host=localhost;dbname=codeigniter3', 
'hostname' => '', 
'username' => 'root', 
'password' => '', 
'database' => '', 
'dbdriver' => 'pdo', 
'dbprefix' => '', 
'pconnect' => FALSE, 
'db_debug' => TRUE, 
'cache_on' => FALSE, 
'cachedir' => '', 
'char_set' => 'utf8', 
'dbcollat' => 'utf8_general_ci', 
'swap_pre' => '', 
'encrypt' => FALSE, 
'compress' => FALSE, 
'stricton' => FALSE, 
'failover' => array(), 
'save_queries' => TRUE 
); 

धन्यवाद

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