2012-11-20 24 views
6

मैंने पीडीओ का उपयोग कर विंडोज़ पर माइक्रोसॉफ्ट एक्सेस फ़ाइल (.accdb) के डेटा को पढ़ने में कामयाब रहा है लेकिन मुझे लिनक्स (सेंटोस) पर काम करने में समस्या आ रही है। मैं देख सकता हूँ मॉड्यूल स्थापित किया गया है:पीडीओ: लिनक्स पर माइक्रोसॉफ्ट एक्सेस फ़ाइल का उपयोग कैसे करें?

[[email protected] host]# php -m | grep PDO 
PDO 
PDO_ODBC 
[[email protected] host]# php -m | grep odbc 
odbc 

कोड:

<?php 
    try{ 
     $dbhAccess = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=/root/access/data.accdb;Uid=Admin"); 
    } 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
     exit(); 
    } 

मैं एक erro जब मैं निष्पादित मिल (CLI) PHP फ़ाइल:

[[email protected] host]# php access.php 
SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified 

उत्तर

1

मैं एक साथ काम किया कभी नहीं किया है माइक्रोसॉफ्ट एक्सेस डेटाबेस लेकिन मैं नियमित रूप से डीबी 2 (आईबीएम एएस/400 के) पर और लिनक्स (उबंटू) सर्वर से एमएस एसक्यूएल सर्वर से कनेक्ट करता हूं। आपकी त्रुटि यह इंगित करती है कि आपके पास एक एमएस एक्सेस ड्राइवर स्थापित नहीं है - केवल एक मुझे पता है: http://www.easysoft.com/products/data_access/odbc-access-driver/index.html

आपका त्रुटि संदेश यह भी कहता है कि "डेटा स्रोत नाम नहीं मिला" - मेरे लिए डीबी 2 या एमएसएसक्यूएल से कनेक्ट करें मुझे कुछ जानकारी /etc/odbc.ini और /etc/odbcinst.ini में जोड़नी है।

/etc/odbcinst.ini - यह वह जगह है जहां आप वर्णन करते हैं कि ओडीबीसी के लिए ड्राइवर कहां खोजें।

[iseries] 
Description  = iSeries Access for Linux ODBC Driver 
Driver   = /usr/lib/libcwbodbc.so 
Setup   = /usr/lib/libcwbodbcs.so 
NOTE1   = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's, 
NOTE2   = the following Driver64/Setup64 keywords will provide that support. 
Driver64  = /usr/lib/lib64/libcwbodbc.so 
Setup64   = /usr/lib/lib64/libcwbodbcs.so 
Threading  = 2 
DontDLClose  = 1 
UsageCount  = 1 

# Define where to find the driver for the Free TDS connections. 
[freetds] 
Description  = MS SQL database access with Free TDS 
Driver   = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so 
Setup   = /usr/lib/i386-linux-gnu/odbc/libtdsS.so 
UsageCount  = 1 

[ODBC] 
Trace   = no 
TraceFile  = /tmp/odbc.log 

कि पिछले अनुभाग ([ODBC]) मैं वर्तमान में ट्रेस है में नहीं = - अगर आप को बदलने कि ट्रेस करने के लिए = हाँ आप कुछ उपयोगी डिबगिंग जानकारी मिल जाएगा: यहाँ मैं डीबी 2 और MSSQL के लिए क्या उपयोग का एक उदाहरण है /tmp/odbc.log फ़ाइल में।

/etc/odbc.ini - यह वह जगह है जहां आप अपने डेटा स्रोतों को परिभाषित करते हैं। यहाँ मैं डीबी 2 और MSSQL के लिए क्या उपयोग का एक उदाहरण है:

[primary] 
Description    = primary 
Driver     = iseries 
System     = XXX.XXX.XXX.XXX 
UserID     = XXXXXXXXXX 
Password    = XXXXXXXXXX 
Naming     = 0 
DefaultLibraries  = QGPL 
Database    = MYLIB 
ConnectionType   = 0 
CommitMode    = 2 
ExtendedDynamic   = 0 
DefaultPkgLibrary  = QGPL 
DefaultPackage   = A/DEFAULT(IBM),2,0,1,0,512 
AllowDataCompression = 1 
LibraryView    = 0 
AllowUnsupportedChar = 0 
ForceTranslation  = 0 
Trace     = 0 

# Define a connection to the MSSQL server. 
# The Description can be whatever we want it to be. 
# The Driver value must match what we have defined in /etc/odbcinst.ini 
# The Database name must be the name of the database this connection will connect to. 
# The ServerName is the name we defined in /etc/freetds/freetds.conf 
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf 
[mssql] 
Description    = MSSQL Server 
Driver     = freetds 
Database    = MyDatabase 
ServerName    = mssql 
TDS_Version    = 8.0 

मैं StackOverflow पर यहाँ कई सवाल देखा है एक Linux मशीन से MSFT एक्सेस डेटाबेस का उपयोग कर के बारे में बात - और वहाँ कभी नहीं लगता है सुखद अंत। यदि कोई तरीका है तो आप डेटा को एक अलग, बेहतर समर्थित, डेटाबेस सिस्टम (जैसे MySQL) पर पोर्ट कर सकते हैं, मुझे लगता है कि आप स्वयं को कुछ सिरदर्द बचाएंगे। सौभाग्य!

2

आपको एमडीबी ड्राइवर स्थापित करना चाहिए।

मेरे पास अभी कोशिश करने का कोई तरीका नहीं है, लेकिन मुझे लगता है कि MDB Tools (विशेष रूप से ODBC driver) जो आप चाहते हैं वह कर सकते हैं।

1

आप उपयोग नहीं कर सकते {माइक्रोसॉफ्ट एक्सेस ड्राइवर (* .mdb, * .accdb)} अपने डेटा स्रोत के हिस्से के रूप में, क्योंकि माइक्रोसॉफ्ट लिनक्स के लिए एक एमएस एक्सेस ODBC ड्राइवर नहीं बनाते हैं। जहां तक ​​मुझे पता है एमएस एक्सेस के लिए 2 ओडीबीसी ड्राइवर हैं। MDB Tools और Easysoft ODBC-Access Driver

यदि आप या तो ड्राइवर स्थापित करते हैं तो आप या तो एक डीएसएन का उपयोग कर सकते हैं जिसे आपने अपनी odbc.ini फ़ाइल में सेट किया है या आप एक डीएसएन-कम कनेक्शन पसंद करते हैं। यहां एक एमएस एक्सेस डेटाबेस

पीडीओ ("odbc: ड्राइवर = {चालक = Easysoft ओडीबीसी-ACCESS}; डीबीक =/रूट/एक्सेस/data.accdb") के एक Easysoft DSN- कम कनेक्शन का एक उदाहरण यहां दिया गया है;

पीडीओ-ओडीबीसी का उपयोग करके डेटा को जोड़ने और प्राप्त करने के बारे में अधिक जानकारी Easysoft PHP guide पर पाई जा सकती है जो पीडीओ-ओडीबीसी के बारे में वार्ता के आधा रास्ते नीचे एक अनुभाग है।-

+0

किसी और को परेशानी हो रही ऊपर वाक्य रचना को जोड़ने नवीनतम संस्करण पर काम नहीं करता बजाय '$ फ़ाइल नाम =" /path/to/database.mdb "का उपयोग करें;' ' $ पीडीओ = नए पीडीओ ("odbc: DRIVER = {Easysoft ODBC-ACCESS}; MDBFILE = {$ filename};"); ' ध्यान दें कि ड्राइवर और एमडीबीएफएलई दोनों ब्लॉक कैप्स हैं, और डीबीक्यू अब एमडीबीएफएलई – Kev

+0

हाय है, वास्तव में, यह Easysoft के साथ काम करता है ओडीबीसी-एक्सेस ड्राइवर। लेकिन यह मुफ्त और काफी महंगा नहीं है। क्या आप एमडीबी टूल्स (एसक्यूएल सपोर्ट बहुत सीमित) के अलावा लिनक्स के लिए ओडीबीसी एक्सेस ड्राइवर जानते हैं? – Franck

+0

वाणिज्यिक ओडीबीसी-एक्सेस ड्राइवरों के लिए एक अच्छा विकल्प मिला: mdb-SQLite https://code.google.com/p/mdb-sqlite/ – Franck