如何将MySQLi预处理语句的结果放入关联数组?

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()为每个参数调用该函数.

之后,只需遍历每一行并为每一行创建一个关联数组,并将其添加到数组中,从而产生所有结果.

  • `$ params [] =&$ row [$ field-> name]中的$ row在哪里;`来自哪里? (4认同)

mai*_*kel 5

更新:从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

  • 请注意,正如文档所说,这只有在安装了MySQL本机驱动程序并且正在运行时才有效,而您的安装可能没有. (3认同)