Tôi đã học PHP trong 2 tháng nay là ngôn ngữ kịch bản đầu tiên của tôi. Đối với hầu hết các vấn đề của tôi tôi có thể dễ dàng tìm thấy một câu trả lời trực tuyến, nhưng có một cái gì đó về PDO mà tôi dường như không thể hiểu được.Bộ kết quả PDO được lưu trữ như thế nào
Để truy xuất dữ liệu từ cơ sở dữ liệu, tôi khởi tạo đối tượng mới của lớp PDO và gọi phương thức PDO :: query() trên đó. Điều này trả về một đối tượng PDOStatement mang bộ kết quả từ truy vấn SQL. Đây là nơi bắt đầu vấn đề. Tôi không thể hiểu được cách thức và nơi dữ liệu từ tập kết quả được lưu trữ.
Trong Hướng dẫn sử dụng PHP, tôi đã học cách hiển thị các hàng được trả về bằng cách lặp qua đối tượng PDOStatement với vòng lặp foreach. Tuy nhiên, hướng dẫn sử dụng PHP nêu rõ rằng nếu một đối tượng được chuyển đổi thành một mảng, kết quả là một mảng có các thành phần là thuộc tính của đối tượng . PDOStatement chỉ có một thuộc tính - $ queryString - chứa chuỗi truy vấn được phát hành. Vậy ... kết quả truy vấn được lưu ở đâu? Và tại sao tôi có thể tiếp cận họ thông qua một mảng với vòng lặp foreach, nhưng không phải bên ngoài nó?
// Instantiate new PDO object to establish a new connection with MySQL database
$db = new PDO('mysql:dbhost=localhost;dbname=world', 'root', 'secret');
// Execute SQL query - Returns a PDOStatement object
$result = $db->query("SELECT Name, Continent, Population FROM Country");
// Result set can be accessed with a foreach loop iterating over the PDOStatement object
foreach ($result as $row) {
echo "$row[Name] - $row[Continent] - $row[Population] <br />";
}
// Outside the foreach loop, $result cannot be accessed this way.
// This produces 'Cannot use object of type PDOStatement as array'
echo $result[0]['Name'];
Nó thực hiện [ 'Iterator'] (http: // php. net/Iterator) giao diện, để một cuộc gọi phương thức ngầm định trả về kết quả riêng lẻ; do đó, họ không phải có mặt như tài sản hoặc dữ liệu nội bộ. – mario