Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przykład użycia bind_result vs get_result

Decydującym czynnikiem dla mnie jest to, czy wywołuję kolumny zapytania za pomocą * .

Korzystanie z bind_result() byłoby lepiej:

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

Korzystanie z get_result() byłoby lepiej:

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

Przykład 1 dla $query1 za pomocą 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();

Przykład 2 dla $query2 za pomocą 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();

Jak widzisz nie możesz użyć bind_result z * . Jednak get_result działa dla obu, ale bind_result jest prostsze i usuwa trochę bałaganu za pomocą $row['name'] .

bind_result()

Plusy:

  • Prostsze
  • Nie musisz zadzierać z $row['name']
  • Używa fetch()

Wady:

  • Nie działa z zapytaniami SQL, które używają *

get_result()

Plusy:

  • Działa ze wszystkimi instrukcjami SQL
  • Używa fetch_assoc()

Wady:

  • Musisz pomieszać ze zmiennymi tablicowymi $row[]
  • Nie tak schludny
  • wymaga natywnego sterownika 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. MySQL DOŁĄCZYĆ tylko do najnowszego wiersza?

  2. Kodowanie znaków JDBC

  3. Jak uzyskać resztę za pomocą MOD() w PostgreSQL, MS SQL Server i MySQL?

  4. Jak zainstalować MySQL na Ubuntu?

  5. Jak utworzyć tabelę w MySQL Workbench za pomocą GUI