为什么要调用call_user_func_array(array($statement, 'bind_param'), $bind_arguments)?因为$bind_arguments是一个数组。这样你就可以拥有一个函数,将语句绑定到其查询参数,无论你有多少个参数。
好代码的例子...
<?php
$dblink = new mysqli('HOSTNAME','USERNAME','PASSWORD','DATABASENAME');
$statement = $dblink->prepare("SELECT * from Person WHERE FirstName = ? AND MiddleName = ? AND LastName = ? and Age = ?");
$recordvalues = ['John', 'H.', 'Smith', 25];
$sqlbindstring = "sssi";
$bind_arguments = [];
$bind_arguments[] = $sqlbindstring;
foreach ($recordvalues as $recordkey => $recordvalue)
{
$bind_arguments[] = & $recordvalues[$recordkey];
}
call_user_func_array(array($statement, 'bind_param'), $bind_arguments);
$statement->execute();
$result = $statement->get_result();
if($result) {
while ($row = $result->fetch_assoc()) {
print("\n\nMy row is...");
print_r($row);
}
}
?>
糟糕代码的示例...
<?php
$statement->prepare("SELECT * from Person WHERE FirstName = ? AND MiddleName = ? AND LastName = ? and Age = ?");
$statement->bind('John', 'H.", 'Smith', 25);
?>
在第一个例子中:您可以将尽可能多或尽可能少的内容传递给绑定,以便在整个应用程序中仅调用一次bind()。这样可以很好地扩展。
在第二个例子中:您必须为数据库中每个可能的记录的每个可能的插入组编写一个bind()语句。这样扩展性就不好了。