MySQLI binding params using call_user_func_array

后端 未结 7 2315
别跟我提以往
别跟我提以往 2020-11-30 09:01

Please see below my code. I am attempting to bind an array of paramenters to my prepared statement. I\'ve been looking around on the web and can see I have to use call_user_

7条回答
  •  情话喂你
    2020-11-30 09:51

    Why would you want to call call_user_func_array(array($statement, 'bind_param'), $bind_arguments)? Because $bind_arguments is an array. You get to have one function that binds a statement to its queried parameters, no matter how many parameters you'd have otherwise.

    Example of good code...

        prepare("SELECT * from Person WHERE FirstName = ? AND MiddleName = ? AND LastName = ? and Age = ?");
            $recordvalues = ['John', 'H.', 'Smith', 25];
            $sqlbindstring = "sssi";    # String, String, String, Integer example
    
                # make the references
            $bind_arguments = [];
            $bind_arguments[] = $sqlbindstring;
            foreach ($recordvalues as $recordkey => $recordvalue)
            {
                $bind_arguments[] = & $recordvalues[$recordkey];    # bind to array ref, not to the temporary $recordvalue
            }
    
                # query the db
            call_user_func_array(array($statement, 'bind_param'), $bind_arguments);     # bind arguments
            $statement->execute();  # run statement
            $result = $statement->get_result(); # get results
    
                # get the results
            if($result) {
                while ($row = $result->fetch_assoc()) {
                    print("\n\nMy row is...");
                    print_r($row);
                }
            }
        ?>
    

    Example of bad code...

        prepare("SELECT * from Person WHERE FirstName = ? AND MiddleName = ? AND LastName = ? and Age = ?");
            $statement->bind('John', 'H.", 'Smith', 25);
    
        ?>
    

    In the first example: You can pass as much or as little to the binding to be done, so that bind() might be called in only one line in your entire application. This scales well.

    In the second example: You must write one bind() statement for every possible group of insertions for every possible record in your database. This scales poorly.

提交回复
热议问题