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

Ví dụ về cách sử dụng bind_result và get_result

Yếu tố quyết định đối với tôi, là liệu tôi có gọi các cột truy vấn của mình bằng * hay không .

Sử dụng bind_result() sẽ tốt hơn cho việc này:

// Use bind_result() with fetch()
$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';

Sử dụng get_result() sẽ tốt hơn cho việc này:

// Use get_result() with fetch_assoc() 
$query2 = 'SELECT * FROM table WHERE id = ?';

Ví dụ 1 cho $query1 sử dụng bind_result()

$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
$id = 5;

if($stmt = $mysqli->prepare($query)){
   /*
        Binds variables to prepared statement

        i    corresponding variable has type integer
        d    corresponding variable has type double
        s    corresponding variable has type string
        b    corresponding variable is a blob and will be sent in packets
   */
   $stmt->bind_param('i',$id);

   /* execute query */
   $stmt->execute();

   /* Store the result (to get properties) */
   $stmt->store_result();

   /* Get the number of rows */
   $num_of_rows = $stmt->num_rows;

   /* Bind the result to variables */
   $stmt->bind_result($id, $first_name, $last_name, $username);

   while ($stmt->fetch()) {
        echo 'ID: '.$id.'<br>';
        echo 'First Name: '.$first_name.'<br>';
        echo 'Last Name: '.$last_name.'<br>';
        echo 'Username: '.$username.'<br><br>';
   }

   /* free results */
   $stmt->free_result();

   /* close statement */
   $stmt->close();
}

/* close connection */
$mysqli->close();

Ví dụ 2 cho $query2 sử dụng get_result()

$query2 = 'SELECT * FROM table WHERE id = ?'; 
$id = 5;

if($stmt = $mysqli->prepare($query)){
   /*
        Binds variables to prepared statement

        i    corresponding variable has type integer
        d    corresponding variable has type double
        s    corresponding variable has type string
        b    corresponding variable is a blob and will be sent in packets
   */
   $stmt->bind_param('i',$id);

   /* execute query */
   $stmt->execute();

   /* Get the result */
   $result = $stmt->get_result();

   /* Get the number of rows */
   $num_of_rows = $result->num_rows;



   while ($row = $result->fetch_assoc()) {
        echo 'ID: '.$row['id'].'<br>';
        echo 'First Name: '.$row['first_name'].'<br>';
        echo 'Last Name: '.$row['last_name'].'<br>';
        echo 'Username: '.$row['username'].'<br><br>';
   }

   /* free results */
   $stmt->free_result();

   /* close statement */
   $stmt->close();
}

/* close connection */
$mysqli->close();

Như bạn thấy, bạn không thể sử dụng bind_result với * . Tuy nhiên, get_result hoạt động cho cả hai, nhưng bind_result đơn giản hơn và giải quyết một số mớ hỗn độn với $row['name'] .

bind_result ()

Ưu điểm:

  • Đơn giản hơn
  • Không cần phải gây rối với $row['name']
  • Sử dụng fetch()

Nhược điểm:

  • Không hoạt động với truy vấn SQL sử dụng *

get_result ()

Ưu điểm:

  • Hoạt động với tất cả các câu lệnh SQL
  • Sử dụng fetch_assoc()

Nhược điểm:

  • Phải lộn xộn với các biến mảng $row[]
  • Không gọn gàng
  • yêu cầu trình điều khiển gốc MySQL ( mysqlnd )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Độ dài VARCHAR của MySQL và UTF-8

  2. Tắt ONLY_FULL_GROUP_BY

  3. phpMyAdmin bị lỗi # 2002 không thể đăng nhập vào máy chủ mysql phpmyadmin

  4. Chèn MySQL vào từ Cơ sở dữ liệu này trong Cơ sở dữ liệu khác

  5. Làm thế nào để điền vào các lỗ hổng trong các trường tự động tăng dần?