Hướng dẫn php pdo( sqlsrv prepare) - php pdo (chuẩn bị sqlsrv)
Chuyển đến nội dung chính Trình duyệt này không còn được hỗ trợ nữa. Show
Hãy nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, bản cập nhật bảo mật và hỗ trợ kỹ thuật. Thực thi câu lệnh trực tiếp và thực thi câu lệnh đã chuẩn bị trong trình điều khiển PDO_SQLSRV
Trong bài viết nàoTải xuống trình điều khiển PHPChủ đề này thảo luận về việc sử dụng thuộc tính PDO :: SQLSRV_ATTR_DIRECT_Query để chỉ định thực thi câu lệnh trực tiếp thay vì mặc định, được thực thi câu lệnh được chuẩn bị. Sử dụng một câu lệnh đã chuẩn bị có thể dẫn đến hiệu suất tốt hơn nếu câu lệnh được thực thi nhiều lần bằng cách sử dụng liên kết tham số. Nhận xétNếu bạn muốn gửi câu lệnh Transact-SQL trực tiếp đến máy chủ mà không cần chuẩn bị câu lệnh của trình điều khiển, bạn có thể đặt thuộc tính PDO :: SQLSRV_ATTR_DIRECT_QUERY với PDO :: SetAttribution (hoặc dưới dạng tùy chọn trình điều khiển được chuyển cho PDO :: __ Bạn gọi PDO :: Chuẩn bị. Theo mặc định, giá trị của PDO :: SQLSRV_ATTR_DIRECT_Query là sai (sử dụng thực thi câu lệnh đã chuẩn bị). Nếu bạn sử dụng PDO :: Truy vấn, bạn có thể muốn thực hiện trực tiếp. Trước khi gọi PDO :: Truy vấn, gọi PDO :: SetAttribution và Set PDO :: SQLSRV_ATTR_DIRECT_Query thành true. Mỗi cuộc gọi đến PDO :: Truy vấn có thể được thực thi với một cài đặt khác nhau cho PDO :: SQLSRV_ATTR_DIRECT_Query. Nếu bạn sử dụng PDO :: Chuẩn bị và PDostatement :: Thực thi để thực thi truy vấn nhiều lần bằng cách sử dụng các tham số ràng buộc, thực thi câu lệnh đã chuẩn bị tối ưu hóa việc thực thi truy vấn lặp lại. Trong tình huống này, hãy gọi PDO :: Chuẩn bị với PDO :: SQLSRV_ATTR_DIRECT_Query thành Sai trong tham số mảng tùy chọn trình điều khiển. Khi cần thiết, bạn có thể thực hiện các câu lệnh đã chuẩn bị với PDO :: SQLSRV_ATTR_DIRECT_Query được đặt thành Sai. Sau khi bạn gọi PDO :: Chuẩn bị, giá trị của PDO :: SQLSRV_ATTR_DIRECT_Query không thể thay đổi khi thực hiện truy vấn đã chuẩn bị. Nếu một truy vấn yêu cầu bối cảnh được đặt trong truy vấn trước đó, thì hãy thực hiện các truy vấn của bạn bằng PDO :: SQLSRV_ATTR_DIRECT_Query được đặt thành true. Ví dụ: nếu bạn sử dụng các bảng tạm thời trong các truy vấn của mình, PDO :: SQLSRV_ATTR_DIRECT_Query phải được đặt thành True. Mẫu sau đây cho thấy rằng khi ngữ cảnh từ câu lệnh trước đó là bắt buộc, bạn cần đặt PDO :: SQLSRV_ATTR_DIRECT_Query thành true. Mẫu này sử dụng các bảng tạm thời, chỉ có sẵn cho các câu lệnh tiếp theo trong chương trình của bạn khi các truy vấn được thực thi trực tiếp.
Ghi chú Nếu truy vấn được gọi một thủ tục được lưu trữ và các bảng tạm thời được sử dụng trong quy trình được lưu trữ này, hãy sử dụng PDO :: Exec thay thế.
Xem thêmLớp PDO PDONhận xét Người giữ chỗ trùng lặp cho một tham số được mã hóa nhị phân sẽ không hoạt động Xem thêm Lớp PDO PDO::prepare
Trong bài viết nàyTải xuống trình điều khiển PHP Chuẩn bị một tuyên bố để thực hiện. Cú pháp
Thông sốTuyên bố $: Một chuỗi chứa câu lệnh SQL. key_pair: một mảng chứa một tên và giá trị thuộc tính. Xem phần Nhận xét để biết thêm thông tin. Giá trị trả vềTrả về một đối tượng pdostatement về thành công. Khi thất bại, trả về một đối tượng PDOException hoặc sai tùy thuộc vào giá trị của 6.Nhận xétTrình điều khiển Microsoft cho PHP cho SQL Server không đánh giá các câu lệnh đã chuẩn bị cho đến khi thực hiện. Bảng sau liệt kê các giá trị key_pair có thể.
Khi sử dụng 8, bạn có thể sử dụng 1 để chỉ định loại con trỏ. Ví dụ: chuyển mảng sau cho PDO :: Chuẩn bị để đặt con trỏ động:
Bảng sau đây cho thấy các giá trị có thể cho 1. Để biết thêm thông tin về con trỏ có thể cuộn, hãy xem các loại con trỏ (trình điều khiển PDO_SQLSRV).
Bạn có thể đóng một đối tượng pdostatement bằng cách gọi 3:
Ví dụ về phía trướcVí dụ này cho thấy cách sử dụng PDO :: Chuẩn bị với các điểm đánh dấu tham số và con trỏ chỉ về phía trước.
Ví dụ con trỏ tĩnhVí dụ này cho thấy cách sử dụng PDO :: Chuẩn bị với con trỏ tĩnh phía máy chủ. Để biết ví dụ hiển thị con trỏ phía máy khách, hãy xem các loại con trỏ (trình điều khiển PDO_SQLSRV).
Ví dụ mục tiêuHai đoạn sau đây cho thấy cách sử dụng PDO :: Chuẩn bị với dữ liệu được nhắm mục tiêu cho các cột char/varchar. Vì mã hóa mặc định cho PDO :: Chuẩn bị là UTF-8, người dùng có thể sử dụng tùy chọn 4 để tránh chuyển đổi ngầm.lựa chọn 1
Lựa chọn 2
Chuẩn bị ví dụVí dụ này cho thấy cách sử dụng PDO :: Chuẩn bị với 5 được đặt thành True.
Trình điều khiển PDO_SQLSRV thay thế nội bộ thay thế tất cả các trình giữ chỗ bằng các tham số được ràng buộc bởi pdostatement :: bindparam (). Do đó, một chuỗi truy vấn SQL không có người giữ chỗ được gửi đến máy chủ. Xem xét ví dụ này,
Với 5 được đặt thành false (trường hợp mặc định), dữ liệu được gửi đến cơ sở dữ liệu là: 0Máy chủ sẽ thực thi truy vấn bằng tính năng truy vấn được tham số hóa của nó để tham số liên kết. Mặt khác, với 5 được đặt thành True, truy vấn được gửi đến máy chủ về cơ bản là: 1Cài đặt 5 thành true có thể bỏ qua một số hạn chế trong SQL Server. Ví dụ: SQL Server không hỗ trợ các tham số được đặt tên hoặc vị trí trong một số mệnh đề Transact-SQL. Hơn nữa, SQL Server có giới hạn liên kết 2100 tham số.Ghi chú Với việc mô phỏng các chuẩn bị được đặt thành TRUE, bảo mật của các truy vấn được tham số hóa không có hiệu lực. Do đó, ứng dụng của bạn phải đảm bảo rằng dữ liệu được liên kết với (các) tham số không chứa mã Transact-SQL độc hại. Mã hóaNếu người dùng muốn liên kết các tham số với các mã hóa khác nhau (ví dụ, UTF-8 hoặc nhị phân), người dùng nên chỉ định rõ ràng mã hóa trong tập lệnh PHP. Trình điều khiển PDO_SQLSRV trước tiên kiểm tra mã hóa được chỉ định trong 9 (ví dụ: 0).Nếu không tìm thấy, trình điều khiển kiểm tra xem có mã hóa nào được đặt trong 1 hoặc 2. Mặt khác, trình điều khiển sẽ sử dụng mã hóa được chỉ định trong 3 hoặc 4.Ngoài ra, bắt đầu bằng phiên bản 5.8.0, khi sử dụng PDO :: Chuẩn bị với 5 được đặt thành TRUE, người dùng có thể sử dụng các loại chuỗi mở rộng được giới thiệu trong Php 7.2 để đảm bảo sử dụng tiền tố 6. Các đoạn dưới đây hiển thị các lựa chọn thay thế khác nhau.Ghi chú Với việc mô phỏng các chuẩn bị được đặt thành TRUE, bảo mật của các truy vấn được tham số hóa không có hiệu lực. Do đó, ứng dụng của bạn phải đảm bảo rằng dữ liệu được liên kết với (các) tham số không chứa mã Transact-SQL độc hại. Mã hóa 2Nếu người dùng muốn liên kết các tham số với các mã hóa khác nhau (ví dụ, UTF-8 hoặc nhị phân), người dùng nên chỉ định rõ ràng mã hóa trong tập lệnh PHP. 3Trình điều khiển PDO_SQLSRV trước tiên kiểm tra mã hóa được chỉ định trong 4Nếu không tìm thấy, trình điều khiển kiểm tra xem có mã hóa nào được đặt trong 5Ngoài ra, bắt đầu bằng phiên bản 5.8.0, khi sử dụng PDO :: Chuẩn bị với unset($stmt); 5 được đặt thành TRUE, người dùng có thể sử dụng các loại chuỗi mở rộng được giới thiệu trong Php 7.2 để đảm bảo sử dụng tiền tố prepare( $query, array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 1 ) ); $stmt->execute( array( $col1, $col2 ) ); print $stmt->rowCount(); echo "\n"; $query = "insert into Table1(col1, col2) values(:col1, :col2)"; $stmt = $conn->prepare( $query, array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 1 ) ); $stmt->execute( array( ':col1' => $col1, ':col2' => $col2 ) ); print $stmt->rowCount(); unset($stmt); ?> 6. Các đoạn dưới đây hiển thị các lựa chọn thay thế khác nhau.Theo mặc định, việc chuẩn bị mô phỏng được đặt thành sai, trong trường hợp đó, các hằng số chuỗi PDO mở rộng sẽ bị bỏ qua.
Xem thêmLớp PDO PDO Nhận xétGửi và xem phản hồi cho |