php - 使用 mysqli 从数据库中获取单个结果

标签 php loops mysqli

我是第一次尝试使用 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
} 
?>

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

最佳答案

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

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

      $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;

以上过程的详细解释可以看我的article .至于为什么你必须遵循它,在这个著名的 question 中有解释。

查询中没有变量

在您的情况下,查询中没有要使用的变量,您可以使用 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]);

如你所见,虽然辅助函数可以减少代码量,但类的方法可以将所有重复的代码封装在里面,让你只写有意义的部分——查询、输入参数和期望的结果格式(以方法名称的形式)。

关于php - 使用 mysqli 从数据库中获取单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624509/

相关文章:

php - 并行运行 PHP 和 Mysqli 查询

php - 将两个 SQL 查询合并在一起(语法问题)

php - 了解 gmtime 返回值

Javascript - deepEqual 比较和递归

python - 使用作为字符串一部分的整数迭代 for 循环

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 喜欢另一个页面/URL 的 Facebook "like"按钮

php - 单击按钮后显示最近的数据(不同页面)

php - Symfony2 和 PHPUnit - 访问 getContainer()

java - 类似的 while 循环和 do while 循环之间的输出差异?