Mysql
 sql >> база данни >  >> RDS >> Mysql

Пример за това как да използвате bind_result срещу get_result

Решаващият фактор за мен е дали извиквам колоните на заявката си с помощта на * .

Използване на bind_result() би било по-добре за това:

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

Използване на get_result() би било по-добре за това:

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

Пример 1 за $query1 използвайки 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();

Пример 2 за $query2 използвайки 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();

Както можете да видите, не можете да използвате bind_result с * . Въпреки това, get_result работи и за двете, но bind_result е по-просто и премахва част от бъркотията с $row['name'] .

bind_result()

Плюсове:

  • По-просто
  • Няма нужда да се забърквате с $row['name']
  • Използва fetch()

Против:

  • Не работи със SQL заявки, които използват *

get_result()

Плюсове:

  • Работи с всички SQL изрази
  • Използва fetch_assoc()

Против:

  • Трябва да се забърквам с променливите на масива $row[]
  • Не е толкова чисто
  • изисква роден драйвер за 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 заявка?

  2. Adminer – Разширен уеб базиран инструмент за администриране на бази данни за Linux

  3. Достъпът е отказан за потребител 'root'@'localhost' с PHPMyAdmin

  4. Присъединете се към нас в Амстердам за среща с OptimaData &VidaXL

  5. MySQL:Транзакции срещу заключващи таблици