zec*_*ude 9 php mysqli associative-array prepared-statement
我有一个SQL查询和一个mysqli预处理语句:
$sql = 'SELECT photographers.photographer_id, photographers.photographer_name
FROM photographers';
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
$stmt->bind_result($photographer_id, $photographer_name);
$OK = $stmt->execute();
$stmt->fetch();
}
Run Code Online (Sandbox Code Playgroud)
如何将结果存储在关联数组中,以便稍后循环并获取sql字符串返回的所有数据?
Chr*_*ris 30
请尝试以下方法:
$meta = $statement->result_metadata();
while ($field = $meta->fetch_field()) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($statement, 'bind_result'), $params);
while ($statement->fetch()) {
foreach($row as $key => $val) {
$c[$key] = $val;
}
$hits[] = $c;
}
$statement->close();
Run Code Online (Sandbox Code Playgroud)
首先,您获取查询元数据并从中获取您已获取的所有字段(您可以手动执行此操作,但此代码适用于所有查询而不是手动构建).该call_user_func_array()函数mysqli_stmt::bind_result()为每个参数调用该函数.
之后,只需遍历每一行并为每一行创建一个关联数组,并将其添加到数组中,从而产生所有结果.
更新:从PHP 5.3.0开始,您可以获得一个提供fetch_array方法的mysqli_result对象.
$sql = 'SELECT photographers.photographer_id, photographers.photographer_name
FROM photographers';
$data = null;
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
$stmt->bind_result($photographer_id, $photographer_name);
$OK = $stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_array();
}
Run Code Online (Sandbox Code Playgroud)
文档:http://php.net/manual/en/mysqli-stmt.get-result.php