让 bind_results 在 while 循环中工作的问题
Issues getting bind_results to work in while loop
我正在尝试遍历我的 bind_results,但它无法正常工作。我已经尝试了 20 种不同的方法,结果总是一样的。我只得到 $survey_user_id
和 $survey_result
的第一条记录回显。
此外,当我像在查询中那样执行 COUNT
时,是否也需要循环遍历它?因为截至目前,当 rating_draft_result.id 有多个 id 时,它只计算 1 条记录。
try {
$survey_title_stmt = $con->prepare("SELECT COUNT(rating_draft_result.id), rating_draft_result.user_id, rating_draft_result.result
FROM rating_draft_result
INNER JOIN users ON
rating_draft_result.user_id = users.id
AND rating_draft_result.result = users.id");
if ( !$survey_title_stmt || $con->error ) {
// Check Errors for prepare
die('Survey SELECT total count prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$survey_title_stmt->execute()) {
die('Survey SELECT total count execute() failed: ' . htmlspecialchars($survey_title_stmt->error));
}
$survey_title_stmt->store_result();
} catch (Exception $e ) {
die("Survey SELECT total count: " . $e->getMessage());
}
$survey_title_stmt->bind_result($survey_id, $survey_user_id, $survey_result);
while ($survey_title_stmt->fetch()) {
$survey_id;
$survey_user_id;
$survey_result;
}
?>
<div class="survey_results_out">
<div id="survey_results_title">Survey Results</div>
<div class="survey_popup_container">
<a class="survey_popup" href="javascript:void(0)">Who drafted best results</a>
<div id="">Users that completed this survey</div><?php echo $survey_id; ?>
<div class="survey_popup_wrap light_admin">
<a class="close_survey_popup" href="javascript:void(0)">X</a>
<div id="indexpopupTitleWrap">
<div id="indexpopupTitle">Results of who drafted the best</div>
</div>
<div id="survey_results_content_wrap">
<div id="survey_results_content_usernames">
<?php
echo $survey_user_id;
echo $survey_result;
?>
我的数据库 table 看起来像这样...
users
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`lastname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`phone_number` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`salt` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`joined` datetime NOT NULL,
`group` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
rating_draft_result
CREATE TABLE `rating_draft_result` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`result` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
期望的输出:
users id``firstname``lastname``email``phone_number``username``password``salt``joined group
1 Jack Johnson jack@email.com 2222 jackusername ffd fdddfd today 1
10 Tom Thompson fdfdfddf@fef.com 5555 Tomusername
rating_draft_result
`id` `user_id` `result`
20 1 10
我希望能够将 rating_draft_result 的 user_id 和结果与用户 table 的 ID 字段相匹配。
所以我想获取 jackusername 和 tomusername 字段。
不太确定你想要什么数据。
但是以下内容可能会有所帮助:-
这会获取 rating_draft_result.id 以及与之相关的 2 个用户名
SELECT rating_draft_result.id, u1.username, u2.username
FROM rating_draft_result
INNER JOIN users u1 ON rating_draft_result.user_id = u1.id
INNER JOIN users u2 ON rating_draft_result.result = u2.id
这会为 rating_draft_result table
中的每对用户名集获取 rating_draft_result.id 的计数
SELECT COUNT(rating_draft_result.id), u1.username, u2.username
FROM rating_draft_result
INNER JOIN users u1 ON rating_draft_result.user_id = u1.id
INNER JOIN users u2 ON rating_draft_result.result = u2.id
GROUP BY u1.username, u2.username
我正在尝试遍历我的 bind_results,但它无法正常工作。我已经尝试了 20 种不同的方法,结果总是一样的。我只得到 $survey_user_id
和 $survey_result
的第一条记录回显。
此外,当我像在查询中那样执行 COUNT
时,是否也需要循环遍历它?因为截至目前,当 rating_draft_result.id 有多个 id 时,它只计算 1 条记录。
try {
$survey_title_stmt = $con->prepare("SELECT COUNT(rating_draft_result.id), rating_draft_result.user_id, rating_draft_result.result
FROM rating_draft_result
INNER JOIN users ON
rating_draft_result.user_id = users.id
AND rating_draft_result.result = users.id");
if ( !$survey_title_stmt || $con->error ) {
// Check Errors for prepare
die('Survey SELECT total count prepare() failed: ' . htmlspecialchars($con->error));
}
if(!$survey_title_stmt->execute()) {
die('Survey SELECT total count execute() failed: ' . htmlspecialchars($survey_title_stmt->error));
}
$survey_title_stmt->store_result();
} catch (Exception $e ) {
die("Survey SELECT total count: " . $e->getMessage());
}
$survey_title_stmt->bind_result($survey_id, $survey_user_id, $survey_result);
while ($survey_title_stmt->fetch()) {
$survey_id;
$survey_user_id;
$survey_result;
}
?>
<div class="survey_results_out">
<div id="survey_results_title">Survey Results</div>
<div class="survey_popup_container">
<a class="survey_popup" href="javascript:void(0)">Who drafted best results</a>
<div id="">Users that completed this survey</div><?php echo $survey_id; ?>
<div class="survey_popup_wrap light_admin">
<a class="close_survey_popup" href="javascript:void(0)">X</a>
<div id="indexpopupTitleWrap">
<div id="indexpopupTitle">Results of who drafted the best</div>
</div>
<div id="survey_results_content_wrap">
<div id="survey_results_content_usernames">
<?php
echo $survey_user_id;
echo $survey_result;
?>
我的数据库 table 看起来像这样...
users
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`lastname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`phone_number` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`salt` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`joined` datetime NOT NULL,
`group` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
rating_draft_result
CREATE TABLE `rating_draft_result` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`result` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
期望的输出:
users id``firstname``lastname``email``phone_number``username``password``salt``joined group
1 Jack Johnson jack@email.com 2222 jackusername ffd fdddfd today 1
10 Tom Thompson fdfdfddf@fef.com 5555 Tomusername
rating_draft_result
`id` `user_id` `result`
20 1 10
我希望能够将 rating_draft_result 的 user_id 和结果与用户 table 的 ID 字段相匹配。
所以我想获取 jackusername 和 tomusername 字段。
不太确定你想要什么数据。
但是以下内容可能会有所帮助:-
这会获取 rating_draft_result.id 以及与之相关的 2 个用户名
SELECT rating_draft_result.id, u1.username, u2.username
FROM rating_draft_result
INNER JOIN users u1 ON rating_draft_result.user_id = u1.id
INNER JOIN users u2 ON rating_draft_result.result = u2.id
这会为 rating_draft_result table
中的每对用户名集获取 rating_draft_result.id 的计数SELECT COUNT(rating_draft_result.id), u1.username, u2.username
FROM rating_draft_result
INNER JOIN users u1 ON rating_draft_result.user_id = u1.id
INNER JOIN users u2 ON rating_draft_result.result = u2.id
GROUP BY u1.username, u2.username