簡體   English   中英

使用 mysqli 來自數據庫的單個結果

[英]Single result from database using 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
} 
?>

如何從第一行或其他任何內容顯示單個記錄、任何記錄、名稱或 email,僅顯示單個記錄,我該怎么做? 在單個記錄的情況下,考慮刪除所有上述循環部分,讓我們顯示沒有循環的任何單個記錄。

如果只需要一個結果,則不應使用循環。 立即獲取該行。

  • 如果您需要將整行提取到關聯數組中:

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

如您所見,雖然輔助函數可以減少代碼量,但類的方法可以將所有重復代碼封裝在里面,使您只編寫有意義的部分——查詢、輸入參數和所需的結果格式(在方法名稱的形式)。

使用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'];

如果您只假設一個結果,您可以按照 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和上面沒有什么不同

而不是使用$row = $query->fetch(); 嘗試使用:

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

每次您可以通過使用以下方式顯示它們來檢查是否從 mysql 表中獲取數據:

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

第一個答案將完成這項工作,但在這種情況下,您不需要循環結果。

$row = $result->fetch_row();

只需回顯該列

  echo   $row['column']; 

這應該可以解決問題

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

請注意,此方法會將內部指針移動到下一行,就像其他fetch_*方法一樣。 當它到達末尾時,它將返回false 因此,在上面的示例中,最好使用fetch_assoc()將整行提取到數組中。

它也可以與mysqli::query()一起用於不帶參數的 SQL 語句。

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

php.net中有一個示例,是#4。

http://php.net/manual/zh/mysqli.quickstart.statements.php

<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
    !$mysqli->query("CREATE TABLE test(id INT, label CHAR(1))") ||
    !$mysqli->query("INSERT INTO test(id, label) VALUES (1, 'a')")) {
    echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

$res = $mysqli->query("SELECT id, label FROM test WHERE id = 1");
$row = $res->fetch_assoc();

printf("id = %s (%s)\n", $row['id'], gettype($row['id']));
printf("label = %s (%s)\n", $row['label'], gettype($row['label']));
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM