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>");