Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

PHP, ORM, MSSQL và Unicode, có thể làm cho chúng hoạt động cùng nhau không?

Cập nhật: Trình điều khiển không còn ở chế độ xem trước. MS đã cung cấp hướng dẫn chính thức cho phiên bản hiện đã phát hành:https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu

Hướng dẫn bên dưới hiện đã lỗi thời vì MS đã tải xuống trình điều khiển xem trước.

Vâng, có trình điều khiển ODBC do Microsoft cung cấp. Điều đó sẽ cung cấp hành vi thích hợp trong vấn đề này. Xem phần cuối của bài đăng để biết cách tôi đã kiểm tra hành vi của nó (một cách sơ bộ). Nó đã được thử nghiệm dựa trên Cơ sở dữ liệu Azure SQL V12.

Cách cài đặt trình điều khiển Microsoft SQL ODBC trên Ubuntu 16.04

Điều này đã được thử nghiệm trên phiên bản Ubuntu 16.04 Azure mới dựa trên hình ảnh Azure Ubuntu 16.04 do Canonical cung cấp. Sau khi đăng nhập, tôi chuyển sang người dùng root bằng sudo -i , sau đó:

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

Kiểm tra nó

Thay thế máy chủ và thông tin đăng nhập trong lệnh sau bằng của riêng bạn.

sqlcmd -S somedatabase.database.windows.net -U someuser -P somepassword

Bạn sẽ có thể đưa ra các lệnh SQL tại thời điểm này. Được rồi, hãy làm cho nó hoạt động với php.

Sử dụng nó với php

Chúng tôi phải đảm bảo rằng gói libodbc1 chưa được cài đặt và nó sẽ không được cài đặt, vì nó sẽ được php sử dụng thay vì gói tuân thủ tùy chỉnh của chúng tôi và điều đó sẽ dẫn đến các vấn đề về mã hóa.

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

Tại thời điểm này, bạn sẽ có nó dưới dạng Trình điều khiển ODBC.

Kiểm tra hành vi của nó

Tạo một tệp php, test.php với mã hóa UTF-8 và với nội dung sau. Thay thế máy chủ, cơ sở dữ liệu và thông tin đăng nhập trong chuỗi kết nối bằng của riêng bạn.

<?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

Chạy điều này với php -f test.php cho thấy rằng chúng tôi lấy lại chuỗi mà không có bất kỳ lỗi nào. Ngoài ra, chuỗi có vẻ tốt từ SQL Server Management Studio. Tôi đã quan sát thấy truy vấn sau trên trang Thông tin chi tiết về hiệu suất của Cổng Azure:(@P1 nvarchar(max))INSERT INTO test VALUES(@P1) , vì vậy các câu lệnh đã chuẩn bị rõ ràng đã được sử dụng, vì vậy tôi cho rằng nó có thể xử lý tình huống của bạn (và của tôi).

(Bài đăng này đã giúp ích rất nhiều trong khi cố gắng làm cho nó hoạt động:http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/ Cảm ơn boris !)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn trên nhiều cơ sở dữ liệu trên cùng một máy chủ

  2. Sự kiện chờ SQL Server -1

  3. Cách sử dụng các tính năng AlwaysOn của SQL Server

  4. SQL Server NẾU KHÔNG TỒN TẠI Sử dụng?

  5. Cách đọc và phân tích kế hoạch thực thi SQL Server