gpt4 book ai didi

PHP/MySQL 奇怪的问题影响仅当用户登录时从数据库中获取

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

所以我有这个函数可以从数据库中获取数据并回显它。该函数从数据库中获取文章 ID、文章标题和一些其他数据。

当用户未登录时,该功能运行良好并显示所有数据,但是当用户登录时,突然只获取文章标题。所有数据都在同一个数据库中,甚至在相同的表,但只获取了文章 ID!

注意事项:

  1. 在我的本地主机上没有发生这种情况。
  2. 我的主机是 ipage.com,为了让 php session 正常工作,我需要在 session_start() 之前添加 session_save_path(//path)(我不知道这是否与问题有关)<

更新:

这是错误:Warning: implode() [function.implode]: Invalid arguments passed in/path

这是函数:

function getNowPlaying($stmt) {

$sql = 'SELECT movies.imdbID, movies.title FROM movies ORDER BY Rand() LIMIT 15';
if ($stmt->prepare($sql)) {
$stmt->bind_result($imdbID, $title);
$stmt->execute();
$i = 0;
while ($stmt->fetch()) {
$data[$i]["imdb"] = zeroFill($imdbID);
$data[$i]["title"] = $title;
$i++;
}
}

for ($i = 0; $i < count($data); $i++) {

$genres = getGenre($stmt, $data[$i]["imdb"]);
$data[$i]["genre"] = implode(', ', $genres);

$data[$i]["poster"] = getPoster($stmt, $data[$i]["imdb"]);
}

return $data;
}

function getGenre ($stmt, $id, $db = 'main') {

if ($db === 'main') {
$sql = 'SELECT sys_genres.genre FROM sys_genres, movie_genres WHERE sys_genres.genreID = movie_genres.genreID AND movie_genres.imdbID = ?
ORDER BY movie_genres.genreORDER';
}

else if ($db === 'inp') {
$sql = 'SELECT sys_genres.genre FROM sys_genres, inp_movie_genres WHERE sys_genres.genreID = inp_movie_genres.genreID AND inp_movie_genres.imdbID = ?
ORDER BY inp_movie_genres.genreORDER';
}

if ($stmt->prepare($sql)) {
$stmt->bind_param('i', $id);
$stmt->bind_result($genres);
$stmt->execute();

while ($stmt->fetch()) {
$data[] = $genres;
}
}

if (!empty($data)) {
return $data;
}
}

用户登录时的Session数组:

Array
(
[xsrf_token] => 13721578024c33e20b2940d3.39161731
[username] => jonagoldman
[userID] => 24
[start] => 1278468629
)

更新 2:

这是导致问题的部分:

在 index.php 中我有这个:

if (isset($_SESSION['userID'])) {
$user_points = getUserPoints($stmt, $_SESSION['userID']);
}


function getUserPoints($stmt, $userid) {

$sql = 'SELECT points FROM user_points WHERE userID = ? LIMIT 1';

if ($stmt->prepare($sql)) {
$stmt->bind_param('i', $userid);
$stmt->bind_result($data);
$stmt->execute();
$stmt->fetch();
}

if (!empty($data)) {
return $data;
}

}

当用户登录时,那部分代码导致了问题。有什么想法吗?

最佳答案

您的代码中没有任何内容暗示任何与 session 相关的内容,但请注意 getGenre 可能返回也可能不返回结果。当 getGenre 不返回任何内容时,调用 implode 会做什么还不清楚。该警告会向我建议您不会返回任何流派。

使用 contrived example我可以复制你的警告:

function foo(){ }
$bar = foo();
echo implode(', ', $bar);

产生警告

Warning: implode(): Invalid arguments passed in...

这会让我相信您的问题发生在链条的更上游...也就是说您观察到的是症状而不是问题。

显然,核心问题是您传递的是 $stmt 而不是连接本身。您看到的问题源于仅在用户登录时运行的代码。这并不意味着您的登录方案有问题,而且它与 session 完全无关。核心问题是,当用户登录时,您正在做一些通常不会用 $stmt 做的事情,实际上是在破坏它。

你到处传递 $stmt 你应该传递你的连接 $conn (从你上面的评论我知道这是 $conn ).然后在任何需要语句的地方通过运行 $stmt = $conn->stmt_init(); 从连接中获取语句。

关于PHP/MySQL 奇怪的问题影响仅当用户登录时从数据库中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191309/

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