使用 mysqli 的数据库的单个结果

2022-08-30 12:12:17

我第一次尝试使用mySQLi。我已经在循环的情况下做到了。循环结果正在显示,但当我尝试显示单个记录时,我卡住了。下面是正在运行的循环代码。

<?php
// Connect To DB
$hostname="localhost";
$database="mydbname";
$username="root";
$password="";

$conn = mysqli_connect($hostname, $username, $password, $database);
?>

<?php
$query = "SELECT ssfullname, ssemail FROM userss ORDER BY ssid";
$result = mysqli_query($conn, $query);
$num_results = mysqli_num_rows($result);
?>

<?php
/*Loop through each row and display records */
for($i=0; $i<$num_results; $i++) {
$row = mysqli_fetch_assoc($result);
?>

Name: <?php print $row['ssfullname']; ?>
<br />
Email: <?php print $row['ssemail']; ?>
<br /><br />

<?php 
// end loop
} 
?>

如何显示单个记录,任何记录,姓名或电子邮件,从第一行或其他任何内容,仅显示单个记录,我该怎么做?在单个记录情况下,考虑删除上述所有循环部分,让我们显示任何没有循环的记录。


答案 1

当只需要一个结果时,则不应使用循环。只需立即获取行即可。

  • 如果您需要将整行读取到关联数组中:

      $row = $result->fetch_assoc();
    
  • 如果您只需要一个值

      $row = $result->fetch_row();
      $value = $row[0] ?? false;
    

最后一个示例将返回第一个返回行中的第一列,或者如果未返回任何行。它也可以缩短为一行,false

$value = $result->fetch_row()[0] ?? false;

以下是不同用例的完整示例

要在查询中使用的变量

如果要在查询中使用变量,则必须使用预准备语句。例如,给定我们有一个变量:$id

$query = "SELECT ssfullname, ssemail FROM userss WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

// in case you need just a single value
$query = "SELECT count(*) FROM userss WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$value = $result->fetch_row()[0] ?? false;

上述过程的详细说明可以在我的文章中找到。至于为什么你必须遵循它,在这个着名的问题中得到了解释

查询中没有变量

在您的情况下,在查询中没有要使用的变量的情况下,您可以使用以下方法:query()

$query = "SELECT ssfullname, ssemail FROM userss ORDER BY ssid";
$result = $conn->query($query);
// in case you need an array
$row = $result->fetch_assoc();
// OR in case you need just a single value
$value = $result->fetch_row()[0] ?? false;

顺便说一句,虽然在学习时使用原始API是可以的,但请考虑在将来使用一些数据库抽象库或至少使用一个帮助器函数:

// using a helper function
$sql = "SELECT email FROM users WHERE id=?";
$value = prepared_select($conn, $sql, [$id])->fetch_row[0] ?? false;

// using a database helper class
$email = $db->getCol("SELECT email FROM users WHERE id=?", [$id]);

如您所见,尽管帮助器函数可以减少代码量,但类的方法可以将所有重复代码封装在内部,使您只能编写有意义的部分 - 查询,输入参数和所需的结果格式(以方法名称的形式)。


答案 2

用。试试这个,mysqli_fetch_row()

$query = "SELECT ssfullname, ssemail FROM userss WHERE user_id = ".$user_id;
$result = mysqli_query($conn, $query);
$row   = mysqli_fetch_row($result);

$ssfullname = $row['ssfullname'];
$ssemail    = $row['ssemail'];

推荐