Search code examples
phpmysqlmysqliprepared-statement

Example of how to use bind_result vs get_result


I would like to see an example of how to call using bind_result vs. get_result and what would be the purpose of using one over the other.

Also the pro and cons of using each.

What is the limitation of using either and is there a difference.


Solution

  • Although both methods work with * queries, when bind_result() is used, the columns are usually listed explicitly in the query, so one can consult the list when assigning returned values in bind_result(), because the order of variables must strictly match the structure of the returned row.

    Example 1 for $query1 using bind_result()

    $query1 = 'SELECT id, first_name, last_name, username FROM `table` WHERE id = ?';
    $id = 5;
    
    $stmt = $mysqli->prepare($query1);
    /*
        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>';
    }
    

    Example 2 for $query2 using get_result()

    $query2 = 'SELECT * FROM `table` WHERE id = ?'; 
    $id = 5;
    
    $stmt = $mysqli->prepare($query2);
    /*
        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>';
    }
    

    bind_result()

    Pros:

    • Works with outdated PHP versions
    • Returns separate variables

    Cons:

    • All variables have to be listed manually
    • Requires more code to return the row as array
    • The code must be updated every time when the table structure is changed

    get_result()

    Pros:

    • Returns associative/enumerated array or object, automatically filled with data from the returned row
    • Allows fetch_all() method to return all returned rows at once

    Cons:

    • requires MySQL native driver (mysqlnd)