Php 是$query->;get_result()获取结果的正确方法?

Php 是$query->;get_result()获取结果的正确方法?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我目前有以下代码 $sql = 'SELECT * FROM customers'; $query = $con->prepare( $sql ); $query->execute(); $rr = $query->get_result(); while ($s = $rr->fetch_assoc()) { echo '<tr>'; echo '<td>' . $s['name'] . '</td>'; e

我目前有以下代码

$sql = 'SELECT * FROM customers';
$query = $con->prepare( $sql );
$query->execute();
$rr = $query->get_result();


while ($s = $rr->fetch_assoc()) {
    echo '<tr>';
    echo '<td>' . $s['name'] . '</td>';
    echo '<td>' . $s['email'] . '</td>';
    echo '<td>' . $s['mobile'] . '</td>';
    echo '</tr>';
}
$sql='SELECT*FROM customers';
$query=$con->prepare($sql);
$query->execute();
$rr=$query->get_result();
而($s=$rr->fetch_assoc()){
回声';
回显'.$s['name'].';
回显'.$s['email'].';
回显'.$s['mobile'].';
回声';
}

这是使用mysqli从数据库获取结果的正确方法吗?

我不知道您是否对数据库进行了加密。 请也检查此示例:

<?php
    $mysqli = new mysqli($dbHost, $dbUsername, $dbPassword, $dbDatabase);
    $stmt = $mysqli->prepare('select * from foobar');
    $stmt->execute();
    $stmt->store_result();
    $meta = $stmt->result_metadata();

    while ($column = $meta->fetch_field()) {
       $bindVarsArray[] = &$results[$column->name];
    }       
    call_user_func_array(array($stmt, 'bind_result'), $bindVarsArray);

    $stmt->fetch();

    echo var_dump($results);
    // outputs:
    //
    // array(3) {
    //  ["id"]=>
    //  &int(1)
    //  ["foo"]=>
    //  &string(11) "This is Foo"
    //  ["bar"]=>
    //  &string(11) "This is Bar"
    // }
    ?>

这是从准备好的语句中获取结果的一种完全可以接受的方法,但只有在安装了本机mysqli扩展(如果安装了本机PHP,那么它应该存在)的情况下,它才会起作用。您还可以使用
$query->bind_result()
直接填充变量,如下所示

$sql = 'SELECT name,email,mobile FROM customers';
$query = $con->prepare( $sql );
$query->execute();
$query->bind_result($name, $email, $mobile);

while ($query->fetch()) {
    echo '<tr>';
    echo '<td>' . $name . '</td>';
    echo '<td>' . $email . '</td>';
    echo '<td>' . $mobile . '</td>';
    echo '</tr>';
}
$sql='从客户处选择姓名、电子邮件、手机';
$query=$con->prepare($sql);
$query->execute();
$query->bind_result($name、$email、$mobile);
而($query->fetch()){
回声';
回显“.$name.”;
回显“.$email.”;
回音“.$mobile.”;
回声';
}
请注意,每次调用
$query->fetch()
时,都会用下一行的数据填充变量(按照从数据库检索变量的顺序,因此我在示例中显式命名了列),因此需要
while
循环遍历所有数据


希望这有帮助。

这是正确的方法吗?如果您的环境中安装了
mysqlnd
,则“是”应该可以工作。为什么不试试呢?恶心!这很混乱,而且有很多行根本没有意义,比如单独使用
$stmt->fetch()
。这是一个非常糟糕的例子。@worldofjr感谢,我认为这很完美。我刚开始学这个。谢谢again@john没问题。如果此答案或任何其他答案解决了您的问题,您可以通过单击答案左侧的勾号将其标记为已接受。@worldofjr还有一件事,执行此操作后,我需要关闭stmt,如$query->close(),然后关闭连接$con->close()。@john您不需要关闭查询或连接。这样做几乎没有什么好处,但如果您不打算再次使用查询/连接,那么也没有什么坏处。
<?php

//First make a connection to the database server:
$mysql = new mysqli("host_or_ip", "username", "password", "database");

//Then check your new connection
if($mysql->connect_errno){
    die("DB connection failed: ", $mysql->connect_error);
}

//Run a select query and check there are no errors
$result = $mysql->query("SELECT book_name FROM bookshelf LIMIT 30");
if(!result){
    die("Error running query: ".$result->error);
}

//Output the results
echo("".
    "<table>".
        "<thead>".
            "<tr>".
                "<th>Book Name</th>".
                "<th>Author</th>".
                "<th>Publisher</th>".
            "</tr>".
        "</thead>".
        "<tbody>");

while($row = $result->fetch_assoc()){
    echo '<tr>';
    echo '<td>'.$row['book_name'].'</td>';
    echo '<td>'.$row['author'].'</td>';
    echo '<td>'.$row['publisher'].'</td>';
    echo '</tr>';
}

echo("</tbody></table>");