[英]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'];
这应该可以解决问题
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.