अपडेट करें: ड्राइवर अब पूर्वावलोकन में नहीं है। MS ने अब जारी किए गए संस्करण के लिए आधिकारिक निर्देश प्रदान किए हैं:https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu
नीचे दिए गए निर्देश अब पुराने हो चुके हैं जैसा कि MS ने पूर्वावलोकन ड्राइवर डाउनलोड को खींच लिया है।
खैर, माइक्रोसॉफ्ट द्वारा प्रदान किया गया ओडीबीसी ड्राइवर है। इस संबंध में उचित व्यवहार प्रदान करना चाहिए। पोस्ट का अंत देखें कि मैंने इसके व्यवहार का परीक्षण कैसे किया (प्रारंभिक तरीके से)। इसका परीक्षण Azure SQL डेटाबेस V12 के विरुद्ध किया गया था।
उबंटू 16.04 पर माइक्रोसॉफ्ट एसक्यूएल ओडीबीसी ड्राइवर कैसे स्थापित करें
यह ताजा उबंटू 16.04 एज़ूर इंस्टेंस पर परीक्षण किया गया था जो कैननिकल द्वारा प्रदान की गई उबंटू 16.04 एज़ूर छवि पर आधारित था। लॉग इन करने के बाद, मैंने sudo -i
. का उपयोग करके रूट उपयोगकर्ता पर स्विच किया , फिर:
apt-get update
apt-get -y install atool make build-essential libc6 libkrb5-3 libgss3 e2fsprogs openssl equivs
wget https://download.microsoft.com/download/2/E/5/2E58F097-805C-4AB8-9FC6-71288AB4409D/msodbcsql-13.0.0.0.tar.gz
atool -x msodbcsql-13.0.0.0.tar.gz
rm msodbcsql-13.0.0.0.tar.gz
pushd msodbcsql-13.0.0.0/
./build_dm.sh --accept-warning | tee build_dm_result.txt
command=$(cat build_dm_result.txt | grep "Run the command" | cut -d"'" -f2)
rm build_dm_result.txt
sh -c "$command"
popd
echo "/usr/lib64" > /etc/ld.so.conf.d/microsoft-lib64.conf
ldconfig
pushd msodbcsql-13.0.0.0/
./install.sh install --accept-license
इसका परीक्षण करें
निम्न कमांड में सर्वर और क्रेडेंशियल को अपने स्वयं के साथ बदलें।
sqlcmd -S somedatabase.database.windows.net -U someuser -P somepassword
आपको इस बिंदु पर SQL कमांड जारी करने में सक्षम होना चाहिए। ठीक है, चलिए इसे php के साथ काम करते हैं।
php के साथ इसका प्रयोग करें
हमें यह सुनिश्चित करना चाहिए कि libodbc1 पैकेज स्थापित नहीं है और यह स्थापित नहीं होगा, क्योंकि इसका उपयोग हमारे कस्टम अनुपालन वाले के बजाय PHP द्वारा किया जाएगा, और इससे एन्कोडिंग समस्याएं पैदा होंगी।
cat > libodbc1<<EOL
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: libodbc1
Version: 9999
Description: fake pkg, so that we satisfy the dependency of php7-odbc, so that we can keep our custom built libodbc
EOL
equivs-build libodbc1
dpkg -i libodbc1_9999_all.deb
rm libodbc1
rm libodbc1_9999_all.deb
apt-get install php7.0-odbc php7.0-cli
इस बिंदु पर, आपके पास इसे ODBC ड्राइवर के रूप में उपलब्ध होना चाहिए।
इसके व्यवहार का परीक्षण करना
एक php फ़ाइल बनाएँ, UTF-8 एन्कोडिंग के साथ test.php, और निम्न सामग्री के साथ। कनेक्शन स्ट्रिंग में सर्वर, डेटाबेस और क्रेडेंशियल्स को अपने स्वयं के साथ बदलें।
<?php
$pdo = new PDO('odbc:Driver={ODBC Driver 13 for SQL Server};Server=tcp:somedatabase.database.windows.net,1433;Database=somedatabase;[email protected];Pwd=somepassword;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;');
$str = 'Árvíztűrő tükörfúrógép, and... 你好,世界';
$pdo->prepare("DROP TABLE test")->execute();
$pdo->prepare("CREATE TABLE test(a NVARCHAR(MAX))")->execute();
$stmt = $pdo->prepare("INSERT INTO test VALUES(?)");
$stmt->bindParam(1, $str);
$stmt->execute();
$stmt = $pdo->prepare("SELECT * FROM test");
$stmt->execute();
$data = $stmt->fetchall();
var_dump($data[0][0]==$str); //Returns true
$stmt = $pdo->prepare("SELECT * FROM test WHERE a=?");
$stmt->bindParam(1, $str);
$stmt->execute();
$data = $stmt->fetchall();
var_dump($data[0][0]==$str); //Returns true
इसे php -f test.php
के साथ चलाना दिखाता है कि हमें बिना किसी भ्रष्टाचार के स्ट्रिंग वापस मिल जाती है। साथ ही, SQL सर्वर प्रबंधन स्टूडियो से भी स्ट्रिंग अच्छी लगती है। मैंने Azure पोर्टल के प्रदर्शन अंतर्दृष्टि पृष्ठ पर निम्नलिखित क्वेरी देखी:(@P1 nvarchar(max))INSERT INTO test VALUES(@P1)
, इसलिए तैयार किए गए कथनों का स्पष्ट रूप से उपयोग किया गया था, इसलिए मुझे लगता है कि यह आपके (और मेरे) परिदृश्य को संभाल सकता है।
(इसे काम करने की कोशिश करते समय यह पोस्ट बहुत मददगार थी:http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/ धन्यवाद बोरिस !)