選擇多個值,我有一個用戶表以及存儲與用戶ID的證書另一個表。 1個用戶可以有多個證書。我需要選擇一次用戶並按用戶ID列出所有證書,但我無法正確實現,只爲一個用戶選擇了一個證書。
樣本數據
這非常簡化的樣本數據,對於現實中有超過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
}
?>
輸出NOW
如果我通過GetUserId = 1
我得到的結果:
John Smith
Foo
所需的輸出
應該列出所有針對特定用戶證書。
John Smith
Foo
Bar
Something
我已經試過
我試着使用foreach
循環而循環中,獲得證書,但這樣它沒有選擇任何證書都沒有。你有什麼想法,我該如何實現它?
您的查詢看起來不錯,應該返回john,bar和其他東西,爲什麼它會返回'Foo'? – sagi
這是很好,你正在使用準備好的陳述。你錯誤地使用它們是不好的。你應該在你的查詢中使用綁定來避免sql注入:'WHERE u.Id =:uid'和'$ users-> execute(array('uid'=> $ GetUserId)) ;' –