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

MYSQLI chuẩn bị tuyên bố không tiến hành đầu ra

Vấn đề ban đầu của bạn là bạn đã không kiểm tra mọi cuộc gọi thất bại, chỉ là một số ít khi bắt đầu. Cả store_resultbind_result cũng có thể thất bại.

Vấn đề cụ thể của bạn (sau khi bạn đã khắc phục sự cố ban đầu) là bạn đang thực hiện select * để nhận nhiều nhưng bạn chỉ ràng buộc một Trong kết quả. Điều đó hiển nhiên từ thông báo lỗi bạn nhận được từ bind_result gọi:

Nếu bạn thay đổi select câu lệnh đại loại như select id from ... , bạn sẽ thấy nó bắt đầu hoạt động.

Tuy nhiên, giả sử bạn muốn nhiều cột hơn, bạn nên cung cấp nhiều biến hơn trong liên kết, chẳng hạn như:

$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);

Bạn sẽ nhận thấy tôi không sử dụng select * ở đó, tốt hơn nên sử dụng cách đặt tên cột rõ ràng trong hầu hết các trường hợp để:

  • bạn sẽ không ngạc nhiên khi lược đồ DB thay đổi;
  • bạn chỉ nhận được dữ liệu bạn cần;
  • bạn có thể ánh xạ các cột với các biến kết quả một cách chính xác.

Khá nhiều chỉ nơi mà tôi đã từng thấy là ổn khi sử dụng select * nằm trong các công cụ phân tích DB nơi bạn muốn có được mọi thứ. Nếu bạn biết trước mình muốn gì, đó là điều bạn nên yêu cầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để có được một danh sách các cơ sở dữ liệu?

  2. Cơ sở dữ liệu sao lưu MySQL

  3. MySQLdb - Kiểm tra xem hàng có tồn tại Python không

  4. asp.net / MySQL:Quyền truy cập bị từ chối đối với người dùng '' @ 'localhost' (sử dụng mật khẩu:KHÔNG)

  5. truy vấn mySQL nhiều - trả về lỗi mysql_fetch_array