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

Single result from database using mysqli

提问人:WebStylePress 提问时间:1/31/2013 最后编辑:DharmanWebStylePress 更新时间:8/17/2023 访问量:165058

问:

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

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

PHP 循环 mysqli

评论

0赞 1/31/2013
...ORDER BY ssid LIMIT 1 也删除 for($i = ..){}
0赞 WebStylePress 1/31/2013
实际上,我想删除循环部分,并且无限制地想要通过查询获取一条记录以显示单个记录。

答:

12赞 Edwin Alex 1/31/2013 #1

用。试试这个,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'];

评论

5赞 ironarm 5/24/2019
你不能用 mysqli_fetch_row 来执行此操作,因为它返回一个枚举数组。例如:如果要指定字段名称,则需要使用 mysqli_fetch_assoc,它返回一个关联数组。前任:$row[0], $row[1]$row['ssfullname'];
82赞 Your Common Sense 1/31/2013 #2

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

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

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

      //starting from PHP 8.1
      $value = $result->fetch_column();
      // for older versions:
      $value = $result->fetch_row()[0] ?? false;
    

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

要在查询中使用的变量

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

PHP >= 8.2

// get a single row
$sql = "SELECT fullname, email FROM users WHERE id=?";
$row = $conn->execute_query($query, [$id])->fetch_assoc();

// just a single value
$sql = "SELECT count(*) FROM users WHERE id=?";
$count = $conn->execute_query($query, [$id])->fetch_column();

旧版 PHP 版本:

// get a single row
$query = "SELECT fullname, email FROM users WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

// 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();
$count = $result->fetch_row()[0] ?? false;

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

查询中没有变量

当查询中没有要使用的变量时,可以使用以下方法:query()

// array
$user = $conn->query("SELECT * FROM users LIMIT 1")->fetch_assoc();
// value
$count = $conn->query("SELECT count(*) FROM users")->fetch_column();
// value < 8.1
$count = $conn->query("SELECT count(*) FROM users")->fetch_row()[0];

评论

0赞 WebStylePress 1/31/2013
是的,这就是面向对象的编程。这让我感到害怕,因为这似乎很困难。但我很想学它。请推荐一个我可以了解类以及类和对象的使用等的地方/来源。
6赞 Your Common Sense 1/31/2013
你只需要知道 OOP 来编写类。虽然使用它们不需要任何特殊知识,但就像调用常规函数一样简单。唯一的区别是在函数名称前有一个小前缀。其余的都是一样的。$class->
7赞 MFAL 4/30/2015 #3

如果您假设只有一个结果,则可以像 Edwin 中建议的那样,使用特定的用户 ID 来执行此操作。

$someUserId = 'abc123';

$stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss WHERE user_id = ?");
$stmt->bind_param('s', $someUserId);

$stmt->execute();

$stmt->bind_result($ssfullname, $ssemail);
$stmt->store_result();
$stmt->fetch();

ChromePhp::log($ssfullname, $ssemail); //log result in chrome if ChromePhp is used.

或者作为“您的常识”,它只选择一个用户。

$stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss ORDER BY ssid LIMIT 1");

$stmt->execute();
$stmt->bind_result($ssfullname, $ssemail);
$stmt->store_result();
$stmt->fetch();

除了 PHP v.5 之外,与上述没有什么不同

0赞 Suhad Al Dulaimy 4/28/2021 #4

不要使用 $row = $query->fetch(); 尝试使用:

$result = $query->get_result();
$row=$result->fetch_assoc();

每次您都可以通过使用以下命令显示它们来检查是否从 MySQL 表中获取数据:

var_export( $row['put your column name here'] );

1赞 Ezekiel Arin 7/23/2021 #5

第一个答案可以完成这项工作,但在这种情况下,您不需要循环结果。

$row = $result->fetch_row();

只需回声列

  echo   $row['column']; 

这应该可以解决问题

1赞 Dharman 9/25/2021 #6

从 PHP 8.1 开始,可用mysqli_result::fetch_column()

可用于从结果集中提取单个标量值。mysqli_result::fetch_column()

新方法接受要读取的列的从 0 开始的位置。默认值为 0。

$query = "SELECT ssfullname, ssemail FROM userss WHERE ud=?";
$stmt = $conn->prepare($query);
$stmt->execute([$id])
$result = $stmt->get_result();
$ssemail = $result->fetch_column(1);

请注意,此方法会将内部指针移动到下一行,就像其他方法一样。当它到达最后时,它将返回.因此,在上面的示例中,您最好使用 to 将整行提取到数组中。fetch_*falsefetch_assoc()

它也可以用于不带参数的 SQL 语句。mysqli::query()

$query = "SELECT count(*) FROM userss";
$count = $conn->query($query)->fetch_column();