gpt4 book ai didi

php - 通过 PHP 从 SQL 为 1 个用户选择多个值

转载 作者:行者123 更新时间:2023-11-29 11:37:53 25 4
gpt4 key购买 nike

说明

我有一个包含用户的表和另一个存储带有用户 ID 的证书的表。 1 个用户可以拥有多个证书。我需要选择一次用户并按用户 ID 列出所有证书,但我无法正确实现它,只能为 1 个用户选择 1 个证书。

样本数据

这个非常简化的示例数据,实际上有超过 150 个字段和 5 个表。

我有以下表格:

用户

Id   FirstName   LastName 
1 John Smith
2 Lisa Washington

证书

UserId   CertificateName
1 Foo
1 Bar
1 Something
2 FooBar
2 Bizz

PHP 看起来像:

$UserID = get_current_user_id();
$GetUserId = $_GET["Id"];
if(isset($UserID)) {

$users = $con->prepare("
SELECT u.FirstName
,u.LastName
,c.CertificateName
FROM Users u
LEFT JOIN Certificates c ON u.Id = c.UserID
WHERE u.Id = '$GetUserId'
LIMIT 1
");

$users->execute();

$users->bind_result(
$FirstName,
$LastName,
$CertificateName
);


} else {
echo "There is no User ID detected, try to refresh browser.";
}

<html>
....

<?php
while ($users->fetch()) {
?>
<div class="grid-item"><?php echo $FirstName; ?></div>
<div class="grid-item"><?php echo $LastName; ?></div>
<div class="certificates"><?php echo $CertificateName; ?></div>
<?php
}
?>

现在输出

如果我通过 GetUserId = 1 我得到结果:

John Smith 
Foo

期望输出

它应该列出特定用户的所有证书。

John Smith 
Foo
Bar
Something

我尝试过的

我尝试在 while 循环内使用 foreach 循环来获取证书,但这样它根本没有选择任何证书。您对我如何实现它有什么想法吗?

最佳答案

这应该可行,您可能需要将分隔符更改为您喜欢的其他内容。

SELECT u.FirstName,
u.LastName,
GROUP_CONCAT(c.CertificateName SEPARATOR '<br>') AS CertificateName
FROM Users u
LEFT JOIN Certificates c ON u.Id = c.UserID
WHERE u.Id = '$GetUserId'
LIMIT 1

编辑:根据 @Matei Mihai 的正确评论,您应该绑定(bind)参数,而不是将它们放入可 sql 注入(inject)的查询中

$users = $con->prepare("
SELECT u.FirstName,
u.LastName,
GROUP_CONCAT(c.CertificateName SEPARATOR '<br>') AS CertificateName
FROM Users u
LEFT JOIN Certificates c ON u.Id = c.UserID
WHERE u.Id = ?
LIMIT 1
");
$users->bind_param('i',$GetUserId);
$users->execute();

关于php - 通过 PHP 从 SQL 为 1 个用户选择多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com