对于那些寻找$result=stmt->get_result()替代方法的用户,我制作了这个函数,它允许您模拟$result->fetch_assoc(),但直接使用stmt对象:
function fetchAssocStatement($stmt)
{
if($stmt->num_rows>0)
{
$result = array();
$md = $stmt->result_metadata();
$params = array();
while($field = $md->fetch_field()) {
$params[] = &$result[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
if($stmt->fetch())
return $result;
}
return null;
}
如您所见,它创建了一个数组并将其与行数据一起获取,因为它在内部使用$stmt->fetch(),所以您可以像调用mysqli_result::fetch_assoc一样调用它(只要确保$stmt对象已打开并存储了结果):
//mysqliConnection is your mysqli connection object
if($stmt = $mysqli_connection->prepare($query))
{
$stmt->execute();
$stmt->store_result();
while($assoc_array = fetchAssocStatement($stmt))
{
//do your magic
}
$stmt->close();
}
希望这有帮助。