PDO nghĩa là gì trong PHP?

Đối tượng dữ liệu PHP, thường được gọi là PDO, là một phần mở rộng PHP được xây dựng để giải quyết các vấn đề truy cập cơ sở dữ liệu. Nó cung cấp một giao diện thống nhất để truy cập cơ sở dữ liệu

PDO tạo một lớp trừu tượng để truy cập dữ liệu, vì vậy các nhà phát triển có thể viết mã di động mà không phải lo lắng về các công cụ cơ sở dữ liệu bên dưới. Theo thuật ngữ của giáo dân, bạn sử dụng PDO để phát triển ứng dụng sử dụng MySQL làm bộ lưu trữ cơ sở dữ liệu. Nếu bạn muốn chuyển sang PostgreSQL bất kỳ lúc nào, tất cả những gì bạn cần làm là thay đổi trình điều khiển PDO. Không cần thay đổi mã khác

PDO bao gồm ba loại đối tượng chính. Chúng là đối tượng PDO, đối tượng PDOStatement và đối tượng PDOException. Chúng ta không nhất thiết phải bỏ qua Trình điều khiển PDO, nhưng ba loại đối tượng này cùng nhau tạo thành giao diện chính của tiện ích mở rộng PDO

#Tại sao lại sử dụng PDO?

Nếu bạn đã phát triển bất kỳ ứng dụng điều khiển cơ sở dữ liệu MySQL nào trước đây, nhưng chưa bao giờ dùng thử PDO, bạn phải tự hỏi lợi ích của việc sử dụng PDO là gì, đặc biệt là khi so sánh nó với hai lựa chọn thay thế của nó

mysql

Cách cũ nhất để tương tác với MySQL là sử dụng tiện ích mở rộng mysql. Nó được giới thiệu trong PHP 2. 0. 0, tuy nhiên nó không được dùng nữa kể từ PHP 5. 5. 0 và đã bị xóa trong PHP 7. 0. 0. Hoàn toàn không nên sử dụng tiện ích mở rộng này do yếu tố không được hỗ trợ trong các phiên bản PHP mới hơn

MySQLi

Kể từ PHP 5. 0. 0, một phiên bản cải tiến của tiện ích mở rộng mysql, được gọi là mysqli đã được giới thiệu. Nó mang lại rất nhiều lợi ích so với phần mở rộng mysql, chẳng hạn như giao diện hướng đối tượng, chuẩn bị câu lệnh, nhiều câu lệnh, hỗ trợ giao dịch, khả năng sửa lỗi nâng cao và hỗ trợ máy chủ nhúng

Sự khác biệt chính giữa MySQLi và PDO là

  • PDO hỗ trợ các câu lệnh chuẩn bị phía máy khách, trong khi MySQLi thì không. Chúng ta sẽ thảo luận chi tiết về các câu lệnh chuẩn bị phía máy khách trong các phần sau. Về cơ bản, nó có nghĩa là nó sẽ mô phỏng câu lệnh đã chuẩn bị nếu máy chủ cơ sở dữ liệu đã chọn không hỗ trợ nó
  • MySQLi hỗ trợ cả API hướng đối tượng và API thủ tục, trong khi PDO sử dụng API hướng đối tượng một cách tôn giáo
  • Ưu điểm lớn nhất của việc sử dụng PDO là viết mã di động. Nó cho phép các nhà phát triển chuyển đổi cơ sở dữ liệu dễ dàng, trong khi MySQLi chỉ hỗ trợ cơ sở dữ liệu MySQL

Cuối cùng, chúng tôi khuyên bạn nên sử dụng PDO để xây dựng các ứng dụng của mình

  • Nó cho phép các nhà phát triển viết mã di động
  • Nó khuyến khích lập trình hướng đối tượng

Cuối cùng, chúng tôi muốn nhấn mạnh rằng, không có nghĩa là bạn bị cấm sử dụng MySQLi

Trong các phần tiếp theo, chúng ta sẽ bắt đầu với một số cách phổ biến để chạy truy vấn bằng PDO. Sau đó, chúng tôi sẽ trình bày cách thực hiện các câu lệnh thao tác dữ liệu MySQL khác nhau bằng PDO. Cuối cùng, chúng tôi sẽ tập trung vào một số API PDO phục vụ cùng một mục đích nhưng theo những cách khác nhau

#Chạy truy vấn PDO

Chúng tôi tóm tắt các cách chạy truy vấn PDO khác nhau thành bốn loại, được phân loại theo số bước liên quan từ khi thực hiện truy vấn đến khi nhận được kết quả. Các danh mục này được tạo để giảm bớt nỗ lực ghi nhớ các API PDO và bao gồm

  • giám đốc điều hành
  • tìm nạp truy vấn
  • chuẩn bị thực hiện tìm nạp
  • chuẩn bị liên kết thực hiện tìm nạp

Thiết lập kết nối cơ sở dữ liệu

Trước khi chúng tôi đi vào từng danh mục, trước tiên bạn cần làm quen với việc thiết lập kết nối cơ sở dữ liệu bằng PDO. Đây là điều cơ bản tuyệt đối của PDO, vì nó được sử dụng trong mọi đoạn mã bên dưới

try {
    $dbh = new PDO['mysql:host=localhost;dbname=customers', $user, $pass];
} catch [PDOException $e] {
    die[$e->getMessage[]];
}

Để thiết lập kết nối cơ sở dữ liệu, chúng tôi khởi tạo một đối tượng PDO với ba tham số. Tham số đầu tiên chỉ định nguồn cơ sở dữ liệu [được gọi là DSN], bao gồm tên trình điều khiển PDO, theo sau là dấu hai chấm, tiếp theo là cú pháp kết nối dành riêng cho trình điều khiển PDO. Tham số thứ hai và thứ ba là tên người dùng và mật khẩu cơ sở dữ liệu

Một ngoại lệ sẽ được đưa ra nếu kết nối không thành công. Bạn có thể bắt ngoại lệ và xử lý nó một cách duyên dáng. Kudos ngoại lệ trong trường hợp này, chúng tôi không còn cần đặt kết nối trong câu lệnh if do cơ sở mã rõ ràng và dễ đọc

Trong các mẫu mã sau, chúng tôi sẽ bỏ qua đoạn mã này, để tránh lộn xộn. Xin lưu ý rằng bạn sẽ luôn cần thực hiện kết nối trước khi tiến hành bất kỳ thao tác PDO nào

giám đốc điều hành

Đây là hình thức chạy truy vấn đơn giản nhất. Chúng tôi có thể sử dụng nó để chạy một truy vấn nhanh và thông thường chúng tôi không mong đợi nó trả về bất kỳ kết quả nào

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];

Mặc dù PDO. exec không trả về kết quả tương ứng với truy vấn của bạn, nó trả về một cái gì đó. Bất kể bạn chạy truy vấn nào với PDO. exec, nó trả về số hàng bị ảnh hưởng khi thành công. Nó cũng trả về Boolean FALSE khi thất bại

Lưu ý khi kiểm tra kiểu trả về. kể từ khi nó PDO. exec trả về 0 khi không có hàng nào bị ảnh hưởng, chúng ta phải luôn sử dụng toán tử so sánh === để xác minh thành công khi chạy phương thức

if [FALSE === $dbh->exec['INSERT INTO customers VALUES [1, "Andy"]']] {
    throw new MyException['Invalid sql query'];
}

Nếu bạn đang xây dựng chuỗi truy vấn với đầu vào của người dùng và xử lý thủ công các vấn đề bảo mật như các ký tự thoát như vậy, thì bạn nên sử dụng các giải pháp thay thế khác mà chúng ta sẽ thảo luận sau

tìm nạp truy vấn

Khi chạy truy vấn chẳng hạn như câu lệnh SELECT, chúng tôi mong đợi kết quả trả về tương ứng. Cách dễ nhất để thực hiện điều này là sử dụng

$statement = $dbh->query['SELECT * FROM customers'];
while [$row = $statement->fetch[PDO::FETCH_ASSOC]] {
    echo $row['id'] . ' ' . $row['name'] . PHP_EOL;
}

Lưu ý rằng các phương thức $dbh->query[] và $statement->fetch[] , là cách chúng tôi đặt tên cho các danh mục của mình, theo trình tự gọi các API PDO

Bởi vì PDO. truy vấn trả về tập kết quả dưới dạng đối tượng PDOStatement khi thành công [Nó sẽ trả về Boolean FALSE nếu thất bại, thực hiện kiểm tra tương tự như PDO. exec nếu bạn muốn xác minh]. Lớp PDOStatement triển khai giao diện Traversable, là giao diện cơ sở cho Iterator, nghĩa là nó có thể được sử dụng trong câu lệnh lặp chẳng hạn như vòng lặp. Đương nhiên, có một phiên bản ngắn của mã trước đó

foreach [$dbh->query['SELECT * FROM customers', PDO::FETCH_ASSOC] as $row] {
    echo $row['id'] . ' ' . $row['name'] . PHP_EOL;
}

Bạn có thể nhận thấy, khi gọi PDO. truy vấn hoặc PDOStatement. tìm nạp, chúng tôi đã cung cấp một tham số cờ. Tham số này chỉ định loại cấu trúc dữ liệu chúng tôi muốn từ callee

Một số tùy chọn bao gồm

  • PDO. FETCH_ASSOC. trả về một mảng kết hợp được lập chỉ mục theo tên cột
  • PDO. FETCH_NUM. trả về một mảng được lập chỉ mục bằng số
  • PDO. FETCH_BOTH [mặc định]. trả về một mảng được lập chỉ mục bởi cả tên cột và số cột được lập chỉ mục 0 như được trả về trong tập hợp kết quả của bạn. [Tổng hợp PDO. FETCH_ASSOC và PDO. FETCH_NUM]

Có rất nhiều lựa chọn hơn. Chúng tôi khuyên bạn nên xem nhanh chúng tại Hướng dẫn sử dụng PHP. Mặc dù tham số này là tùy chọn, nhưng chúng ta phải luôn chỉ định nó trừ khi chúng ta thực sự muốn một mảng được lập chỉ mục theo cả tên và số cột. PDO. FETCH_BOTH chiếm gấp đôi bộ nhớ

chuẩn bị thực hiện tìm nạp

Chúng tôi thường xuyên cần chấp nhận đầu vào của người dùng để chạy truy vấn cơ sở dữ liệu. Có hai mối quan tâm chính nếu chúng ta sử dụng phương pháp tìm nạp truy vấn

Trước tiên, chúng tôi sẽ phải đảm bảo truy vấn sql được chuyển đến PDO. truy vấn là an toàn. Thoát và trích dẫn các giá trị đầu vào phải được quan tâm cẩn thận. Thứ hai, PDO. truy vấn thực thi một câu lệnh SQL trong một lệnh gọi hàm duy nhất, có nghĩa là nếu chúng ta cần chạy cùng một truy vấn nhiều lần, nó sẽ sử dụng nhiều lần tài nguyên. Có một cách tốt hơn để làm điều này

PDO lần đầu tiên giới thiệu câu lệnh chuẩn bị. Vậy câu lệnh chuẩn bị là gì?

Trong các hệ thống quản lý cơ sở dữ liệu, một câu lệnh được chuẩn bị hoặc câu lệnh được tham số hóa là một tính năng được sử dụng để thực thi lặp đi lặp lại các câu lệnh cơ sở dữ liệu giống hoặc tương tự với hiệu quả cao. Thường được sử dụng với các câu lệnh SQL như truy vấn hoặc cập nhật, câu lệnh đã chuẩn bị có dạng mẫu trong đó các giá trị hằng số nhất định được thay thế trong mỗi lần thực hiện

Soạn thảo tuyên bố giải quyết hai mối quan tâm nêu trên. Nó không chỉ cải thiện hiệu quả của việc chạy nhiều truy vấn tương tự mà còn đảm nhiệm việc thoát và trích dẫn các giá trị đầu vào của người dùng

Dưới đây là cách chúng tôi triển khai câu lệnh chuẩn bị bằng PDO

$users = ['Andy', 'Tom'];
$statement = $dbh->prepare['SELECT * FROM customers where name = :name'];
foreach [$users as $user] {
    $statement->execute[[':name' => $user]];
    while [$row = $statement->fetch[PDO::FETCH_ASSOC]] {
        echo $row['id'];
    }
}

Lưu ý các bước chúng tôi đã thực hiện ở đây

  • PDO. chuẩn bị được sử dụng để tạo truy vấn sql chứa tham số biến. Quy ước đặt tên cho các tham số là các biến được đặt tên có tiền tố là dấu hai chấm [. ] hoặc dấu chấm hỏi [?]
  • Tuyên bố PDO. exec được gọi để thực hiện truy vấn với giá trị của tham số. Khi ? . Chúng ta có thể liên kết các giá trị bằng cách sử dụng một mảng được lập chỉ mục số. Lưu ý trong foreach, nó sử dụng cùng một câu lệnh để thực hiện truy vấn sau khi ràng buộc giá trị. Nó trả về Boolean FALSE khi thất bại. Chúng ta có thể sử dụng PDOStatement. errorInfo[] để lấy thông tin lỗi liên quan đến hoạt động
  • Tuyên bố PDO. tìm nạp được sử dụng để tìm nạp kết quả với cấu trúc dữ liệu mong muốn

chuẩn bị liên kết thực hiện tìm nạp

Một vấn đề nhỏ mà bạn có thể ĐÃ QUAN SÁT trong đoạn mã trước đó là điều gì sẽ xảy ra khi có nhiều tham số trong câu lệnh chuẩn bị. Chúng ta có thể dễ dàng tạo đoạn mã như thế này

$statement->execute[[':name' => $user, ':mobile' => $mobile, ':address' => $address ]];

Danh sách có thể đi và về. Điều này làm cho mã rất khó đọc. Tuy nhiên, một điều quan trọng hơn cần lưu ý ở đây là, PHP sẽ truyền giá trị đầu vào của người dùng để khớp với loại trường cơ sở dữ liệu của nó nếu chúng không khớp chính xác, điều này dễ gây ra lỗi

Đây là nơi PDOStatement. bindValue đến để lưu. Cách chạy trước đó được đề xuất là

$users = ['Andy', 'Tom'];
$statement = $dbh->prepare['SELECT * FROM customers where name = :name'];
foreach [$users as $user] {
    $statement->bindValue[':name', $user, PDO::PARAM_STR];
    $statement->execute[];
    while [$row = $statement->fetch[PDO::FETCH_ASSOC]] {
        echo $row['id'];
    }
}

Thay vì sử dụng PDOStatement. thực thi để liên kết giá trị với tham số, chúng tôi đã sử dụng PDOStatement. binValue. Nó thêm một vài cải tiến quan trọng cho mã của chúng tôi

  • khả năng đọc. nó làm cho mã dễ đọc đối với các nhà phát triển khác, vì nó chỉ ra loại dữ liệu chính xác mà một tham số sẽ chấp nhận
  • khả năng bảo trì. Tham số thứ ba, chỉ định kiểu dữ liệu của biến truyền, ngăn PHP truyền kiểu dữ liệu không tương thích, dễ bị lỗi. Về lâu dài, nó cũng giúp mã dễ bảo trì hơn, vì nhà phát triển trong tương lai sẽ có thể phát hiện ra kiểu dữ liệu trong nháy mắt

Bốn kỹ thuật này chắc chắn không phải là chính thức. chúng chỉ là các quy ước đặt tên được thực hiện để ghi nhớ các API PDO. Không cần phải tuân theo chúng một cách nghiêm ngặt. Trên thực tế, hầu hết thời gian chúng tôi kết hợp các kỹ thuật này với nhau

#Thao tác dữ liệu

Hãy đưa những gì chúng ta đã học vào hành động. Trong phần này, chúng tôi sẽ sử dụng PDO để thực hiện một số tác vụ phổ biến nhất của MySQL

Bảng cơ sở dữ liệu mẫu

Chúng tôi sẽ cần một bảng cơ sở dữ liệu để chơi với

Với mục đích trình diễn, chúng tôi sẽ tạo một bảng cơ sở dữ liệu rất đơn giản

________số 8

Chèn dữ liệu

Nhiệm vụ đầu tiên của chúng ta là chèn một số dữ liệu vào bảng. Đối với trường hợp sử dụng này, giả sử chúng tôi chấp nhận dữ liệu từ biểu mẫu nhập của người dùng thông qua yêu cầu POST, sau đó chúng tôi chèn bất kỳ dữ liệu nào từ biểu mẫu vào bảng khách hàng

try {
    $dbh = new PDO['mysql:host=localhost;dbname=inventory', 'root', 'root'];
} catch [PDOException $e] {
    die[$e->getMessage[]];
}
 
$name = $_POST['name'];
 
$statement = $dbh->prepare['INSERT INTO customers [name] VALUES [:name]'];
 
if [false === $statement] {
    throw new Exception['Invalid prepare statement'];
}
 
if [false === $statement->execute[[':name' => $name]]] {
    throw new Exception[implode[' ', $statement->errorInfo[]]];
}

Chúng tôi đang sử dụng kỹ thuật chuẩn bị->thực thi->tìm nạp trong mẫu mã này, ngoại trừ việc chúng tôi đã loại bỏ phần tìm nạp vì chúng tôi không mong đợi nó trả về bất kỳ tập kết quả nào

  • Bước đầu tiên là kết nối với cơ sở dữ liệu như bình thường
  • Sau đó, chúng tôi tạo một câu lệnh chuẩn bị. Lưu ý rằng chúng tôi cũng xử lý trường hợp lỗi bằng cách đưa ra một ngoại lệ
  • Và cuối cùng, chúng tôi thực hiện câu lệnh chuẩn bị. Trường hợp thất bại cũng được xử lý. Chúng tôi có thể xuất thông tin hữu ích bằng cách gọi PDOStatement. phương thức errorInfo

Cập nhật dữ liệu

Nhiệm vụ phổ biến thứ hai là cập nhật dữ liệu hiện có. Giả sử trường hợp sử dụng giống như trường hợp trước, ngoại trừ người dùng có thể chuyển vào một tham số bổ sung [$id]

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
0

Như bạn có thể đoán, bên cạnh tham số bổ sung $id , mã giống hệt với mẫu mã trước đó

Xóa bỏ

Nhiệm vụ phổ biến thứ ba là xóa một bản ghi dữ liệu hiện có [trường hợp sử dụng tương tự ở đây]. Người dùng có thể chuyển vào một tham số [$id] và bản ghi tương ứng sẽ bị xóa

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
1

Một lần nữa, đây là một mẫu mã rất giống với mẫu trước đó [chuẩn bị->thực thi->tìm nạp kỹ thuật với phần tìm nạp]. Đó là điểm "làm đẹp" của PDO - thiết kế hướng đối tượng của nó giúp viết mã dễ dàng

Lựa chọn

Nhiệm vụ cuối cùng của chúng tôi là chọn tất cả các bản ghi dữ liệu từ khách hàng, nhưng lần này, chúng tôi sẽ không yêu cầu đầu vào của người dùng

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
2

Trong ví dụ này, chúng tôi đã sử dụng kỹ thuật truy vấn->tìm nạp. Như chúng tôi đã đề cập trước đó và điều đáng nói lại là khi gọi PDOStatement. tìm nạp, thói quen tốt là luôn chỉ định chế độ tìm nạp

Bây giờ chúng tôi đã chạy qua một số ví dụ nhanh về việc sử dụng PDO cho các tác vụ khác nhau. Các mẫu này rất đơn giản nhưng chúng đã cho chúng tôi thấy một API rất dễ sử dụng và nhất quán do PDO cung cấp

API #PDO

Cho đến nay, chúng tôi đã trình diễn một số API PDO phổ biến. PDO vẫn cung cấp nhiều hơn những gì chúng tôi đã trình bày ở trên. Trong phần này, chúng ta sẽ khám phá các API PDO lần cuối và cố gắng bao gồm nhiều API hữu ích nhất có thể. Gần như không thể bao quát mọi khía cạnh của chủ đề này nhưng hãy luôn nhớ rằng có một trang hướng dẫn có thể tham khảo khi bạn nghi ngờ. [Trang hướng dẫn sử dụng PDO]

Phương pháp tìm nạp

Chúng tôi đã đề cập đến một [PDOStatement. tìm nạp] của các phương thức tìm nạp được sử dụng để truy xuất các tập kết quả. Trên thực tế, PDOStatement cung cấp ba phương thức tìm nạp bổ sung

Tuyên bố PDO. lấy tất cả

Hoạt động tương tự như PDOStatement. tìm nạp, PDOStatement. fetchAll cũng chấp nhận một cờ làm tham số đầu tiên, để chỉ định chế độ tìm nạp. Chúng ta phải luôn chỉ định chế độ tìm nạp giống như cách chúng ta làm cho PDOStatement. phương pháp tìm nạp. Nó khác với PDOStatement. tìm nạp ở chỗ nó trả về tất cả kết quả cùng một lúc

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
3

Lưu ý trước của phương pháp này là vì nó tải tất cả các tập kết quả cùng một lúc nên có thể dẫn đến việc sử dụng nhiều bộ nhớ tùy thuộc vào lượng dữ liệu có sẵn. Bạn nên sử dụng phương pháp này với sự chú ý

Tuyên bố PDO. tìm nạpColumn

Một phương pháp tiện dụng để truy xuất dữ liệu từ cột mong muốn là PDOStatement. tìm nạpColumn. Nó trả về một cột duy nhất từ ​​hàng tiếp theo của tập hợp kết quả. Nó tương tự như PDOStatement. tìm nạp, tuy nhiên, nó chỉ trả về một cột tiếp theo thay vì một mảng tiếp theo của kết quả đặt lại

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
4

Tuyên bố PDO. fetchColumn chấp nhận một tham số [tên cột] tùy chọn. Tham số là một số được lập chỉ mục 0 chỉ định cột để truy xuất dữ liệu từ. Khi tham số này bị bỏ qua, nó sẽ mặc định ở cột số 0

Hai điểm không nên khi sử dụng phương pháp này

  • Tuyên bố PDO. fetchColumn sẽ trả về Boolean FALSE khi đến cuối tập kết quả, vì vậy không nên sử dụng nó để truy xuất kiểu Boolean từ cơ sở dữ liệu
  • Tuyên bố PDO. fetchColumn di chuyển con trỏ của nó về phía trước một bước khi nó được gọi, vì vậy không có cách nào để truy xuất một cột khác từ cùng một hàng. [Rõ ràng là con trỏ đã di chuyển đến hàng tiếp theo khi chúng ta gọi nó bằng số cột khác]

Tuyên bố PDO. tìm nạp đối tượng

Phương pháp này là một thay thế cho PDOStatement. tìm nạp [] với PDO. FETCH_CLASS hoặc PDO. kiểu FETCH_OBJ. Mục đích của nó là làm cho mã của chúng ta dễ đọc hơn khi được gọi riêng, khi phương thức này được gọi, nó sẽ trả về tập kết quả tiếp theo dưới dạng đối tượng PHP

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
5

Chúng tôi cũng có thể chuyển vào lớp PHP tùy chỉnh của mình làm tham số đầu tiên, PHP sẽ khởi tạo một phiên bản của đối tượng PHP tùy chỉnh của chúng tôi với dữ liệu được truy xuất và trả về nó

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
6

phương pháp ràng buộc

Trước đây, chúng tôi đã sử dụng PDOStatement. bindValue. Phương thức này liên kết giá trị mong muốn với trình giữ chỗ của truy vấn. Phương pháp này không phải là phương pháp duy nhất cho nhiệm vụ đó mặc dù

ràng buộcParam

Phương pháp này gần giống với PDOStatement. bindValue và không có gì ngạc nhiên khi một số người sử dụng hai phương pháp này thay thế cho nhau, tuy nhiên có một sự khác biệt rất đáng kể giữa hai phương pháp này và bạn có thể phải trả giá đắt nếu không biết về nó

Không giống như PDOStatement. bindValue[], biến được ràng buộc dưới dạng tham chiếu và sẽ chỉ được đánh giá tại thời điểm PDOStatement đó. thực thi [] được gọi là

Hãy xem ý nghĩa của nó qua ví dụ

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
7

Bạn có nhận ra sự khác biệt không? . Kết quả tạo ra hoàn toàn khác

Tuyên bố PDO. bindParam liên kết biến $user làm tham chiếu. Tại thời điểm PDOStatement. exec được gọi, biến $user được đổi thành 'Tom' trong khi PDOStatement. biến bindParam làm giá trị, nó vẫn là 'Andy' kể từ thời điểm PDOStatement. bindValue được gọi là

Hãy chắc chắn rằng bạn hiểu sự khác biệt giữa hai điều này và chọn chúng theo nhu cầu của bạn. Chuyển đổi hai phương pháp này mà không có sự cân nhắc hợp lý không được khuyến khích

ràng buộcColumn

Khác với PDOStatement. bindValue và PDOStatement. bindParam, phương thức này không phải là phương thức để ràng buộc biến để chuẩn bị câu lệnh. trong thực tế, nó hoàn toàn ngược lại. nó liên kết các cột từ kết quả được đặt thành các biến cục bộ PHP

Đây là một phương pháp thú vị để quan sát. Trước đây, chúng ta đã thảo luận rằng một phương thức PDOStatement. fetchObject, có thể trả về tập kết quả dưới dạng một đối tượng đã xác định. Ở đây, với PDOStatement. bindColumn, chúng ta có thể liên kết các cột từ tập hợp kết quả với các biến

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
8

Tham số đầu tiên chỉ định cột bảng, chấp nhận cả tên cột chuỗi và số được lập chỉ mục 0 làm giá trị. Vì vậy, sau đây là hợp lệ quá

$dbh->exec['INSERT INTO customers VALUES [1, "Andy"]'];
9

Các điều kiện

Trong phần cuối, chúng ta sẽ thảo luận về một số thủ thuật khi làm việc với PDO

mệnh đề IN

Xây dựng mệnh đề IN trong câu lệnh chuẩn bị là một nhiệm vụ thú vị. Hãy xem đoạn mã sau và tưởng tượng đây là những gì chúng ta cần xây dựng

?

if [FALSE === $dbh->exec['INSERT INTO customers VALUES [1, "Andy"]']] {
    throw new MyException['Invalid sql query'];
}
0

Thoạt nhìn, nó có vẻ hợp pháp. Hãy nhìn kỹ hơn. Nó sẽ không hoạt động vì câu lệnh chuẩn bị chỉ chấp nhận các loại vô hướng [e. g. chuỗi, int, v.v.]

Nhiệm vụ cuối cùng trở thành xây dựng một chuỗi được phân tách bằng dấu phẩy chứa các dấu chấm hỏi [?] bằng nhau cho biến mảng liên kết. Đây là cách chúng ta có thể xây dựng một chuỗi mệnh đề IN hợp pháp

if [FALSE === $dbh->exec['INSERT INTO customers VALUES [1, "Andy"]']] {
    throw new MyException['Invalid sql query'];
}
1

Ký tự đại diện

Khi xây dựng mệnh đề LIKE, chúng ta có thể muốn làm điều này

if [FALSE === $dbh->exec['INSERT INTO customers VALUES [1, "Andy"]']] {
    throw new MyException['Invalid sql query'];
}
2

Tuy nhiên, điều đó sẽ không hoạt động trong PDO. Chúng ta cần chuyển các ký tự đại diện sang chính biến đó

if [FALSE === $dbh->exec['INSERT INTO customers VALUES [1, "Andy"]']] {
    throw new MyException['Invalid sql query'];
}
3

#Kết thúc

Hy vọng rằng hướng dẫn đơn giản này đã giúp bạn phát triển. Nếu bạn thích bài đăng của chúng tôi, vui lòng theo dõi chúng tôi trên Twitter và giúp truyền bá thông tin. Chúng tôi cần sự hỗ trợ của bạn để tiếp tục. Chúng tôi đã bỏ lỡ bất cứ điều gì?

PDO dạng đầy đủ là gì?

Dạng xuất xứ được bảo vệ . một chỉ dẫn địa lý được xác định theo luật của Liên minh Châu Âu để bảo vệ các sản phẩm nông nghiệp và thực phẩm trong khu vực. Từ điển tiếng Anh Collins. Bản quyền © Nhà xuất bản HarperCollins.

PHP PDO MySQL là gì?

PDO_MYSQL là trình điều khiển triển khai giao diện Đối tượng dữ liệu PHP [PDO] để cho phép truy cập từ cơ sở dữ liệu PHP đến MySQL . PDO_MYSQL sử dụng chuẩn bị mô phỏng theo mặc định. mysql 8. Khi chạy phiên bản PHP trước 7. 1. 16 hoặc PHP 7. 2 trước 7. 2.

Kết nối PDO là gì?

Để chuẩn hóa và hợp lý hóa các phương pháp phát triển, PHP đã giới thiệu Đối tượng dữ liệu PHP [PDO] trong PHP 5. 1. Các đối tượng này được sử dụng để thiết lập các kết nối cơ sở dữ liệu PDO. PDO là lớp truy cập cơ sở dữ liệu cung cấp giao diện nhanh và nhất quán để truy cập và quản lý cơ sở dữ liệu trong các ứng dụng PHP .

PHP có đi kèm với PDO không?

PDO vận chuyển bằng PHP .

Chủ Đề