我是新来的,这是我的第一个问题:)
我有这段代码:
<?php
/*
* Load messages from right users
*/
try {
$selectContactQuery = 'SELECT profile_id, user_id
FROM profilecontact
WHERE profile_id=:profile_id AND owner_id=:owner_id;';
$prepSelectContacts = $conn->prepare($selectContactQuery);
$prepSelectContacts->bindParam(':profile_id', $urlPid, PDO::PARAM_INT);
$prepSelectContacts->bindParam(':owner_id', $uid, PDO::PARAM_INT);
$prepSelectContacts->execute();
$contactsResult = $prepSelectContacts->fetchAll();
$contactsCount = count($contactsResult);
}
catch(PDOException $e) {
$conn = null;
header('Location: ../errors/error_101.html');
}
foreach($contactsResult AS $contactsRow) {
$scrapProfileId = $contactsRow['profile_id'];
$scrapUserId = $contactsRow['user_id'];
$selectScrapQuery = 'SELECT scraps.user_id, scraps.scrap_text, scraps.profile_id, scraps.add_date, user.user_id, user.profile_picture_50
FROM scraps
JOIN user ON(scraps.user_id = user.user_id)
WHERE scraps.user_id = scraps.user_id AND scraps.profile_id = scraps.profile_id ORDER BY add_date';
$prepSelectScrap = $conn->prepare($selectScrapQuery);
$prepSelectScrap->bindParam(':scraps.user_id', $scrapUserId, PDO::PARAM_INT);
$prepSelectScrap->bindParam(':profile_id', $scrapProfileId, PDO::PARAM_INT);
$prepSelectScrap->execute();
$scrapResult = $prepSelectScrap->fetchAll();
$scrapResultCount = count($scrapResult);
if($scrapResultCount > 0) {
foreach($scrapResult AS $scrapResultRow) {
echo '<div class="parentArrow"></div>
<div class="scrapItemParent">
<img class="scrapProfilePic" src=" ' . $scrapResultRow['profile_picture_50']. '" />
<div class="scrapContent">' . $scrapResultRow['scrap_text'] . '<br />
<span class="scrapTime">' . $scrapResultRow['add_date'] . '<br />' . $scrapResultRow['user_id'] . ' ' . $scrapResultRow['profile_id'] . '</span></div></div>';
}
}
}
?>
我尝试做的是第一个SQL查询,我尝试选择一个用户的联系人和他/她关联的特定个人资料。这给了我一个看起来像的结果集:
+-----------+---------+
|profile_id | user_id |
+-----------+---------+
| 32 | 45 |
| 32 | 56 |
| 32 | 78 |
+-----------+---------+
我使用foreach获得了这些结果,您可以在我的代码中看到,该行开头是&#34; foreach($ contactsResult AS $ contactsRow)...&#34;在这个foreach循环中,我执行一个SQL查询来加载来自与正确配置文件关联的用户的消息(第一个SQL查询是加载用户及其关联的配置文件)。但是,我有很多问题。首先,在第二个SQL查询中,有一个WHERE子句:
"WHERE scraps.user_id = scraps.user_id AND scraps.profile_id = scraps.profile_id"
但是,第二个WHERE条件与scraps.profile_id ...被忽略。消息也会多次显示(测试时两次)。
有谁知道这段代码有什么问题?它没有给我任何错误,它只是赢得了我想要它做的事情。我知道大多数问题都是因为循环,但我无法看到另一种实现我需要的方式。
答案 0 :(得分:1)
您必须在查询中输入您的php变量
WHERE scraps.user_id = scraps.user_id AND scraps.profile_id = scraps.profile_id
这将总是相同的,因为scraps.user_id = scraps.user_id
正在比较某些东西
您可以使用:
WHERE scraps.user_id = :scrapUserId AND scraps.profile_id = :scrapProfileId
在这里,我将变量:scrapUserId
和:scrapProfileId
输入到您的查询中。
这将使您能够使用以下语句设置这些值:
$prepSelectScrap->bindParam(':scrapUserId', $scrapUserId, PDO::PARAM_INT);
$prepSelectScrap->bindParam(':scrapProfileId', $scrapProfileId, PDO::PARAM_INT);
答案 1 :(得分:1)
试试这个
$selectScrapQuery = 'SELECT scraps.user_id, scraps.scrap_text, scraps.profile_id, scraps.add_date, user.user_id, user.profile_picture_50
FROM scraps
JOIN user ON(scraps.user_id = user.user_id)
WHERE scraps.user_id =:scraps_user_id AND scraps.profile_id =:scraps_profile_id ORDER BY scraps.add_date';
$prepSelectScrap = $conn->prepare($selectScrapQuery);
$prepSelectScrap->bindParam(':scraps_user_id', $scrapUserId, PDO::PARAM_INT);
$prepSelectScrap->bindParam(':scraps_profile_id', $scrapProfileId, PDO::PARAM_INT);