我正在调用我的IOS应用程序中的一个函数,该函数调用PHP文件中的函数然后应该返回检索到的数据,但是因为我在查询中添加了一个新部分,所以返回nil。
我的新查询在我的数据库上的MYSQL测试服务中工作,但奇怪的是在我的应用程序中返回nil。
以下是我在PHP文件中设置的所有内容:
function fetchAssocStatement($stmt)
{
if($stmt->num_rows>0)
{
$result = array();
$md = $stmt->result_metadata();
$params = array();
while($field = $md->fetch_field()) {
$params[] = &$result[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
if($stmt->fetch())
return $result;
}
return null;
}
// Select all posts + user information made by user with relevant $id
public function selectPosts($id) {
// declare array to store selected information
$returnArray = array();
/*
// sql JOIN
$sql = "SELECT Posts.id,
Posts.uuid,
Posts.caption,
Posts.path,
Posts.date,
Posts.imageHeight,
USERS.id,
USERS.username,
USERS.fullname,
USERS.profileImage
FROM Posts JOIN USERS ON
Posts.id = $id AND USERS.id = $id ORDER by date DESC
LIMIT 0, 5";
*/
$sql = "SELECT Posts.id,
Posts.uuid,
Posts.caption,
Posts.path,
Posts.date,
Posts.imageHeight,
USERS.id,
USERS.username,
USERS.fullname,
USERS.profileImage,
coalesce(A.LikeCNT,0)
FROM Posts INNER JOIN USERS ON
Posts.id = $id AND USERS.id = $id
LEFT JOIN (SELECT COUNT(A.uuidPost) LikeCNT, A.UUIDPost
FROM Activity A
WHERE type = ""
GROUP BY A.UUIDPOST) A
on A.UUIDPost = Posts.uuid
ORDER BY date DESC
LIMIT 0, 5";
if($stmt = $this->connection->prepare($sql))
{
$stmt->execute();
$stmt->store_result();
while($row = $this->fetchAssocStatement($stmt))
{
$returnArray[] = $row;
}
//$stmt->close();
}
return $returnArray;
}
正如您将能够看到我有一个已注释掉的查询,这是我之前获取帖子的查询(效果很好)。但是现在我正在努力为所有图像获得“相似的数量”,在我的应用程序中它没有任何回报......
如果有人能看到,请告诉我!
提前致谢!!
答案 0 :(得分:1)
此:
Posts.id = $id AND USERS.id = $id
这是一个完全不稳定的加入条件。您希望碰巧分享完全相同ID的帖子和用户,这种情况极不可能发生。
不知道你的实际表结构,但你可能想要更像
的东西posts.user_id = users.id
...
where users.id = $id
答案 1 :(得分:0)
您需要捕获错误。我认为正在执行的SQL会抛出错误并且您没有捕获它;这就是没有记录被退回的原因。我type = ""
似乎是一个错误。你想要type is null
或type = ''
(空集)但不想要type = ""
或者你想要type = 'somevalue'
或根本没有类型的值。 (完全消除where子句)我从那里开始(消除where子句),如果得到结果,那么你就知道问题出在where子句