Php fetchall trả về cái gì?
Giống như đã nói trong bài viết chính, các chế độ tìm nạp PDO (cùng với các câu lệnh được chuẩn bị sẵn có thể sử dụng được) là một thứ khiến PDO trở thành một trình bao bọc, chứ không phải là một API cơ sở dữ liệu (mặc dù phổ biến) khác. Các chế độ này có thể giảm đáng kể số lượng mã cho các hoạt động thông thường, vì chúng cho phép bạn lấy dữ liệu ở định dạng phù hợp ngay từ truy vấn Show Mặc dù các hằng số trong câu hỏi được mô tả một phần trên các trang thủ công cho các phương thức tìm nạp() và tìm nạp ALL(), danh sách đầy đủ chỉ có thể được tìm thấy trên trang có tất cả các hằng số PDO, nơi chúng chỉ nằm rải rác giữa các hằng số khác với các mô tả hầu như không vượt quá một . Nó có vẻ không quá thuận tiện và rất có thể đó là lý do tại sao một số chế độ thú vị lại không được khán giả PHP nói chung chú ý. Tôi quyết định loại bỏ các chế độ tìm nạp ra khỏi danh sách toàn cầu và chia chúng thành nhiều loại để thuận tiện, vì tổng số chế độ tìm nạp PDO lên tới con số kha khá là 23 Hơn nữa, một số chế độ có thể được kết hợp với nhau, tăng số lượng định dạng trả lại có thể có ngay cả khi chỉ. Tuy nhiên, người ta phải nhớ rằng không phải tất cả các giá trị của hằng số đều là lũy thừa của 2 và do đó, một số hằng số không thể được kết hợp. Ví dụ: 4 có giá trị hơi bất ngờ là 10 (tương đương với tổ hợp 5 - mặc dù bản thân nó khá vô dụng)Chế độ cổ điểnĐể bắt đầu, hãy liệt kê các chế độ giống với hành vi của các hàm mysql tốt cũ PDO. FETCH_BOTHMột đối tác cho 6. Hàng được trả về ở dạng mảng, trong đó dữ liệu được sao chép, được truy cập thông qua cả chỉ mục số và chỉ mục kết hợp. Chế độ này được thiết lập mặc định
PDO. FETCH_NUMMột người bạn cũ một lần nữa, một đối tác 7, chỉ số chỉ số
PDO. FETCH_ASSOCĐiều tương tự, nhưng đối với 8 - chỉ các chỉ số kết hợp. Xem thêm
PDO. FETCH_OBJnhư 9 nhưng không cung cấp tên lớp. không có tên lớp được cung cấp. Trả về phiên bản 0
Lưu ý rằng PDO không ngớ ngẩn với việc trả lại các đối tượng. PDO. FETCH_LAZYHằng số này đáng chú ý đến mức tôi quyết định dành cả một phần cho nó. Đối với người mới bắt đầu, giá trị được trả về là một thể hiện của lớp đặc biệt 1 và đối tượng này mang rất nhiều tính năng đặc biệt
Hãy làm một số bài kiểm tra. Chúng tôi sẽ cố gắng yêu cầu một lượng dữ liệu đáng kể và xem mức tiêu thụ bộ nhớ, xác minh một vài điều trên đường đi 8đầu ra 9Như bạn có thể thấy, mã này đang tìm nạp tất cả các bản ghi từ bảng người dùng, thêm một cột có kích thước 1Mb. Lần tìm nạp đầu tiên được thực hiện với 7 và có thể thấy rằng nó không thay đổi dung lượng bộ nhớ đã tiêu thụ (lưu ý rằng hành vi này có thể thay đổi tùy thuộc vào ). Sau đó, chúng tôi đang tìm nạp một hàng khác, sử dụng một trong các phương pháp thông thường và xem mức tiêu thụ bộ nhớ ngay lập tức tăng lên. Nên việc tiết kiệm bộ nhớ là điều hiển nhiên. Ngoài ra, chúng tôi đã quan sát thấy sự vắng mặt của lỗi "Biến không xác định" và trạng thái thay đổi sau cuộc gọi 4 do đóTừ đó, chúng ta có thể kết luận rằng đối tượng 1 chỉ là một liên kết đến tập kết quả. Không có trạng thái riêng, nó chỉ đọc dữ liệu từ vị trí con trỏ hiện tại. Với tất cả những điều đó, khá ngạc nhiên khi thấy chế độ này hiếm khi được sử dụngCác chế độ hữu ích nhấtỞ đây tôi quyết định liệt kê các chế độ hữu ích nhất, trả về dữ liệu ở các định dạng được yêu cầu nhiều nhất. Tất cả các chế độ này chỉ có ý nghĩa với 5Lưu ý rằng bạn luôn có thể kết hợp một số chế độ tìm nạp để thay đổi định dạng kết quả. Tất cả các ví dụ bên dưới được đưa ra với 81 được đặt làm định dạng tìm nạp mặc địnhPDO. FETCH_COLUMNThường rất thuận tiện để lấy mảng một chiều đơn giản ra khỏi truy vấn, nếu chỉ một cột trong số nhiều hàng được tìm nạp. của bạn đây 5PDO. FETCH_KEY_PAIRCũng là định dạng cực kỳ hữu ích, khi chúng ta cần lấy cột giống như trên, nhưng đánh chỉ mục không phải theo số thứ tự mà theo một trường duy nhất 6Định dạng khóa-giá trị được trả về là tuyệt vời cho từ điển như dữ liệu hoặc đơn giản cho các giá trị được lập chỉ mục, như bên dưới 7Lưu ý rằng bạn chỉ phải chọn hai cột cho chế độ này, cột đầu tiên phải là duy nhất PDO. FETCH_UNIQUETương tự như trên, nhưng không nhận được một cột mà là hàng đầy đủ, chưa được lập chỉ mục bởi một trường duy nhất 0ở đây bạn lấy mảng dữ liệu được lập chỉ mục theo id (Lưu ý rằng cột đầu tiên được chọn phải là duy nhất. Trong truy vấn này, giả định rằng cột đầu tiên là id, nhưng để chắc chắn hơn, hãy liệt kê nó một cách rõ ràng). Hoặc bạn cũng có thể sử dụng bất kỳ trường duy nhất nào khác 1PDO. FETCH_GROUPChế độ này nhóm các hàng được trả về thành một mảng lồng nhau, trong đó các chỉ mục sẽ là các giá trị duy nhất từ cột đầu tiên và các giá trị sẽ là các mảng tương tự như các mảng được trả về bởi 5 thông thường. Ví dụ, đoạn mã sau sẽ tách nam khỏi nữ và đặt chúng vào các mảng khác nhau 2Vì vậy, đây là giải pháp lý tưởng cho nhu cầu phổ biến như "nhóm sự kiện theo ngày" hoặc "nhóm hàng hóa theo danh mục" Chế độ này có thể được kết hợp với 83 3Một gợi ý. trong trường hợp bạn cần chọn tất cả các trường, nhưng không nhóm theo trường đầu tiên, ý tưởng đầu tiên mà các bào tử trong tâm trí sẽ không hoạt động 4sẽ trả về một lỗi. Để tránh điều đó, chỉ cần thêm dấu hoa thị vào tên bảng 5bây giờ nó hoạt động như một sự quyến rũ OOPTất nhiên, khả năng điều khiển các đối tượng của PDO không bị giới hạn trong việc trả về một phiên bản 84 ngớ ngẩn. Trong phần sau chúng ta sẽ tìm hiểu cả đống chế độ tìm nạp hướng đối tượngPDO. FETCH_CLASSNền tảng của thao tác đối tượng trong PDO. Tạo một thể hiện của một lớp có tên đã cho, ánh xạ các cột được trả về tới các thuộc tính của lớp. Chế độ này có thể được sử dụng để lấy một hàng hoặc một mảng các hàng từ cơ sở dữ liệu. Với 5, cách tiếp cận khá quen thuộc 6sẽ cung cấp cho bạn một mảng bao gồm các đối tượng của lớp Người dùng, với các thuộc tính được điền từ dữ liệu trả về 7Trong khi để có được một hàng, bạn có hai tùy chọn. Tuy nhiên, mặc dù bạn có thể sử dụng phương pháp 4 quen thuộc, như hình bên dưới 8nên sử dụng phương pháp 87 chuyên dụng 9vì có một số vấn đề khi sử dụng 4 để lấy một đối tượng
Bất kể bạn chọn phương thức nào, tất cả các cột được trả về sẽ được gán cho các thuộc tính của lớp tương ứng theo các quy tắc sau
Ví dụ, mã này 0 sẽ cung cấp cho bạn một đối tượng với tất cả các thuộc tính được gán tự động, bất kể chúng có tồn tại trong lớp hay không 1 Từ đó, bạn có thể biết rằng để tránh việc tạo thuộc tính tự động, bạn cần sử dụng phương pháp 90 ma thuật để lọc các thuộc tính ra. Kỹ thuật lọc đơn giản nhất sẽ chỉ là thêm một phương thức 90 trống vào đối tượng của bạn. Với nó, chỉ các thuộc tính hiện có sẽ được đặt2 Như bạn có thể thấy, trong chế độ này, PDO cũng có thể gán giá trị cho các thuộc tính riêng tư. Điều hơi bất ngờ nhưng cực kỳ hữu ích Tất nhiên, đối với các lớp mới được tạo, chúng tôi có thể muốn cung cấp các tham số hàm tạo. Vì vậy, hãy thêm chúng vào các ví dụ trên 3 sẽ cho bạn 4 Như bạn có thể thấy, trong chế độ này, PDO gán các thuộc tính của lớp trước khi gọi hàm tạo. Để sửa đổi hành vi này, hãy sử dụng cờ sau PDO. FETCH_PROPS_LATEKhông phải là chế độ tìm nạp mà là cờ sửa đổi. Như đã lưu ý ở trên, theo mặc định, PDO gán các thuộc tính của lớp trước khi gọi hàm tạo. Hành vi này có thể được thay đổi bằng cờ này 5 Như bạn có thể thấy, một giá trị được gán trong hàm tạo đã bị ghi đè PDO. FETCH_CLASSTYPEThêm một cờ sửa đổi cho PDO lấy tên lớp từ giá trị của cột đầu tiên. Với lá cờ này, người ta có thể tránh sử dụng 94 với 46 Ngoài ra, như đối với bài viết chính, chế độ này có thể hữu ích nếu các đối tượng thuộc các lớp khác nhau có thể được tạo từ cùng một truy vấn 7 PDO. FETCH_INTOKhông giống như 96, không tạo đối tượng mới mà cập nhật đối tượng hiện có. Chỉ hoạt động với 94, biến hiện có làm tham số. Rõ ràng, vô ích với 58 Như bạn có thể thấy, cuộc gọi 4 đang trả về cùng một đối tượng, điều này có vẻ dư thừa đối với tôi. Cũng lưu ý rằng không giống như 96, chế độ này không gán thuộc tính riêng tưPDO. FETCH_SERIALIZEThêm một lá cờ cho 96. Bị cáo buộc nên trả lại một đối tượng đã được đăng theo thứ tự và được lưu trữ trong cơ sở dữ liệu. Hiện tại không hoạt độngDự định làm một cái gì đó như 9 Nhưng đối tượng được trả về từ cơ sở dữ liệu không giống như trước khi tuần tự hóa. Và do đó unserialize thất bại. Sau khi nghịch chế độ này với một người bạn, chúng tôi đã gửi một lỗi, nhưng dường như không có gì thay đổi kể từ đó Dù bằng cách nào, cờ này trông khá vô dụng, vì người ta luôn có thể hủy đánh dấu thủ công 0Điều khoản khácPDO. FETCH_FUNCĐối với những người yêu thích đóng cửa. Chỉ hoạt động với 5. Không thuận tiện lắm vì bạn nên liệt kê các tham số cho mọi cột được trả về theo cách thủ công. Ví dụ: trình giả lập 83 1PDO. FETCH_NAMEDGần như chính xác như 81, nhưng có một chút khác biệt. Nhiều lần tôi đã gặp một câu hỏi, liệu có thể phân biệt các trường khác nhau có cùng tên được trả về bởi cùng một truy vấn hay không. Với câu trả lời duy nhất là sử dụng bí danh trong SQL hoặc chỉ số số thay vì liên kết. Tuy nhiên, PDO cung cấp một cách khác. Nếu chế độ này được sử dụng, các giá trị trả về được gán giống như với 81, nhưng nếu có một vài cột có cùng tên trong tập kết quả, tất cả các giá trị sẽ được lưu trữ trong mảng lồng nhau. Ví dụ: hãy thử chọn từ 56 và 57, trong khi cả hai bảng đều có cột 58. Sử dụng 81, chúng tôi sẽ mất một trong những tên 2Trong khi nếu sử dụng 60 thay thế, mọi thứ sẽ được giữ nguyên 3Tôi nghi ngờ liệu tính năng này có hữu ích hay không, nhưng ít nhất nó cũng cho bạn một sự lựa chọn PDO. FETCH_BOUNDMột chế độ thú vị, về cơ bản khác với những chế độ khác. Bản thân nó không trả về bất kỳ dữ liệu nào, nhưng làm cho PDO gán giá trị cho các biến đã được ràng buộc trước đó bằng cách sử dụng 61 - hành vi có thể quen thuộc với người dùng mysqli.
Làm cách nào để sử dụng tìm nạp tất cả trong PHP?Sử dụng phương thức PHP fetchAll() với phương thức query()
. Đầu tiên, thực hiện truy vấn bằng cách gọi phương thức query() của đối tượng PDO. Sau đó, tìm nạp tất cả các hàng từ tập hợp kết quả vào một mảng bằng phương thức fetchAll().
Sự khác biệt giữa tìm nạp và tìm nạp Tất cả là gì?nếu bạn muốn tất cả các bản ghi. để tìm nạp, bạn sẽ cần lặp lại như vậy while($row = $stmt->fetch()) { # làm việc với bản ghi } đối với fetchAll() bạn có quyền truy cập trực tiếp vào các bản ghi dưới dạng một mảng.
Tìm nạp trong PHP là gì?Tìm nạp dữ liệu từ tập hợp kết quả bằng cách gọi một trong các phương thức tìm nạp sau. Để trả về một hàng từ tập kết quả dưới dạng một mảng hoặc đối tượng, hãy gọi PDOStatement. phương thức tìm nạp . Để trả về tất cả các hàng từ tập kết quả dưới dạng một mảng các mảng hoặc đối tượng, hãy gọi PDOStatement. phương pháp tìm nạp tất cả.
Làm cách nào để tìm nạp dữ liệu từ cơ sở dữ liệu bằng PDO trong PHP?Làm theo các bước để lấy dữ liệu từ Cơ sở dữ liệu trong PHP PDO. . Tạo nên cơ sở dữ liệu. Tạo cơ sở dữ liệu bằng XAMPP, cơ sở dữ liệu được đặt tên là “geeksforgeeks” tại đây. . Tạo bảng. Tạo bảng có tên “fetch_record” gồm 2 cột để lưu trữ dữ liệu. . Tạo cấu trúc bảng. Bảng “fetch_record” chứa 2 trường |