sql >> Database >  >> RDS >> Mysql

Voorbeeld van het gebruik van bind_result versus get_result

De beslissende factor voor mij is of ik mijn zoekkolommen aanroep met * .

Gebruik bind_result() zou hier beter voor zijn:

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

Gebruik get_result() zou hier beter voor zijn:

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

Voorbeeld 1 voor $query1 met behulp van 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();

Voorbeeld 2 voor $query2 met behulp van 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();

Zoals je kunt zien, kun je bind_result . niet gebruiken met * . Echter, get_result werkt voor beide, maar bind_result is eenvoudiger en lost een deel van de rommel op met $row['name'] .

bind_result()

Pluspunten:

  • Eenvoudiger
  • Je hoeft niet te rotzooien met $row['name']
  • Gebruikt fetch()

Nadelen:

  • Werkt niet met SQL-query die * gebruiken

get_result()

Pluspunten:

  • Werkt met alle SQL-instructies
  • Gebruikt fetch_assoc()

Nadelen:

  • Moet rommelen met arrayvariabelen $row[]
  • Niet zo netjes
  • vereist native MySQL-stuurprogramma (mysqlnd )


  1. Hoe database_url op heroku te veranderen?

  2. Hoe een rij in SQLite te krijgen op index (niet op id)

  3. Hoe kan ik een lijst maken Array met de cursorgegevens in Android

  4. Hoe het 'as'-sleutelwoord te gebruiken om een ​​​​tabel in Oracle te aliasen?