Re: Prepared Statements - Select - Bind Parameters w/ correction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



    $stmt = mysqli_stmt_prepare( $cxn, $sql12 );// line 507

//Warning: mysqli_stmt_prepare() expects parameter 1 to be mysqli_stmt, object given in /var/www/x5.php on line 507



$cxn is not a mysqli_stmt. Are you perhaps passing the mysqli database resource instead of the statement?

See this section of my example:

    $stmt = mysqli_prepare( $dbh, $q );
    if( !$stmt )
        throw new Exception( 'Error preparing statement' );
where $dbh is the result of mysqli_connect() and $q is a string containing your unbound query.

-Matt

On 09/28/2012 09:46 AM, Ethan Rosenberg, PhD wrote:

Matt -

Thanks.

Here is what I used, and it still generates an error:

        $allowed_fields = array
( $_POST['Site'] => 's', $_POST['MedRec'] => 'i', $_POST['Fname'] => 's', $_POST['Lname'] => 's', $_POST['Phone'] => 's', $_POST['Height'] => 'i', $_POST['Sex'] => 's', $_POST['Hx'] => 's',
             $_POST['Bday'] => 's',  $_POST['Age'] => 'i' );

        if(empty($allowed_fields))
        {
             echo "ouch";
        }

   // Magically put everything together
    $types = '';
    $args = array();
    foreach( $allowed_fields as $k => $type )
    {
        if( !array_key_exists( $k, $_POST ) )
            continue;

        $args[] = &$_POST[$k]; // Note the addition of the ampersand here
        $types .= $type;
        $sql12 .= " AND ($k = ?)";
    }
echo "new query $sql12";
    // For debugging and demonstration
    echo 'Query: ' . $sql12 . PHP_EOL;
    echo 'Bind types: ' . $types . PHP_EOL;
    echo 'Arguments:' . PHP_EOL;
    print_r($args);

    $stmt = mysqli_stmt_prepare( $cxn, $sql12 );// line 507
//Warning: mysqli_stmt_prepare() expects parameter 1 to be mysqli_stmt, object given in /var/www/x5.php on line 507

    if( !$stmt )
        throw new Exception( 'Error preparing statement' ); // line 509
//Fatal error: Uncaught exception 'Exception' with message 'Error preparing statement' in /var/www/x5.php on line 509

//Exception: Error preparing statement in /var/www/x5.php on line 509


// Put the statement and types variables at the front of the params to pass to mysqli_stmt_bind_param() array_unshift( $args, $stmt, $types ); // Note that I've moved this call. Apparently it doesn't pass back the result. I guess sometimes I just forget these things.

    // mysqli_stmt_bind_param()
    if( !call_user_func_array( 'mysqli_stmt_bind_param', $args ) )
        throw new Exception( 'Failed calling mysqli_stmt_bind_param' );

    if( !mysqli_stmt_execute( $stmt ) )
        throw new Exception( 'Error while executing statement' );
    mysqli_stmt_bind_result( $stmt, $id, $data );

    while( mysqli_stmt_fetch($stmt) )
        printf( "%d %d\n", $id, $data );

    mysqli_stmt_close( $stmt );
 //   mysqli_close( $cxm );


What did I do wrong???

Ethan


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux