Isset 不适用于 mysqli_query

Isset is not working with mysqli_query

所以在我的程序中使用 if !isset 语句时,它无法识别变量已设置。我已将其设置为如果未设置变量 $q 则从我的 mysqli 数据库获取查询。此查询将从我的数据库中取回最新的数据条目。此数据等于一个名为 $row 的变量。稍后调用 $row 变量来检索随后显示在网页上的记录。问题是 if 语句再次运行(当 refreshing/reloading 页面时),即使 $q 已从上次 .php 文件 运行 设置。这是代码:

$db_user = "root";
$db_pass = "";
$db_name = "music_reviews_database";
$db_host = "localhost";

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!isset($q)) {
    $q = mysqli_query($conn, 
            "SELECT album.Album, 
            artist.ArtistsName, 
            datereviewed.DateReviewed, 
            features.Features, 
            genre.Genre, 
            rating.Rating, 
            songname.SongName,
            link.link,
            songname.ID,
            comments.Comments
            FROM songname 
            INNER JOIN album ON album.ID = songname.ID 
            INNER JOIN artist ON artist.ID = songname.ID
            INNER JOIN datereviewed ON datereviewed.ID = songname.ID
            INNER JOIN features ON features.ID = songname.ID
            INNER JOIN genre ON genre.ID = songname.ID
            INNER JOIN rating ON rating.ID = songname.ID
            INNER JOIN link ON link.ID = songname.ID
            INNER JOIN comments ON comments.ID = songname.ID
            ORDER BY DateReviewed DESC LIMIT 1");
    $row = mysqli_fetch_array($q);
}

所以代码应该是这样的?

$q = mysqli_query($conn, 
        "SELECT album.Album, 
        artist.ArtistsName, 
        datereviewed.DateReviewed, 
        features.Features, 
        genre.Genre, 
        rating.Rating, 
        songname.SongName,
        link.link,
        songname.ID,
        comments.Comments
        FROM songname 
        INNER JOIN album ON album.ID = songname.ID 
        INNER JOIN artist ON artist.ID = songname.ID
        INNER JOIN datereviewed ON datereviewed.ID = songname.ID
        INNER JOIN features ON features.ID = songname.ID
        INNER JOIN genre ON genre.ID = songname.ID
        INNER JOIN rating ON rating.ID = songname.ID
        INNER JOIN link ON link.ID = songname.ID
        INNER JOIN comments ON comments.ID = songname.ID
        ORDER BY DateReviewed DESC LIMIT 1");
$row = mysqli_fetch_array($q);
file_put_contents(data.php, return var_export($row,true));
if (file_exists(data.php)) {
    $row = include(data.php);
}

您可以删除

if (!isset($q)) {

和右括号。它们是不必要的。

如果您想避免运行每次查询都得到结果,请尝试缓存结果。

例如

获得查询结果后,将内容发送到文件系统中某处的文件($path)

file_put_contents($path, '<?php return '.var_export($mysql_row,true).';?>');

然后你就可以读出来了:

if (file_exists($path)) $mysql_row = include($path);

所以像这样:

if (file_exists(data.php)) {
    $row = include(data.php);
}else{
      $q = mysqli_query($conn, 
        "SELECT album.Album, 
        artist.ArtistsName, 
        datereviewed.DateReviewed, 
        features.Features, 
        genre.Genre, 
        rating.Rating, 
        songname.SongName,
        link.link,
        songname.ID,
        comments.Comments
        FROM songname 
        INNER JOIN album ON album.ID = songname.ID 
        INNER JOIN artist ON artist.ID = songname.ID
        INNER JOIN datereviewed ON datereviewed.ID = songname.ID
        INNER JOIN features ON features.ID = songname.ID
        INNER JOIN genre ON genre.ID = songname.ID
        INNER JOIN rating ON rating.ID = songname.ID
        INNER JOIN link ON link.ID = songname.ID
        INNER JOIN comments ON comments.ID = songname.ID
        ORDER BY DateReviewed DESC LIMIT 1");
        $row = mysqli_fetch_array($q);    
        file_put_contents(data.php, '<?php return '.var_export($row,true).';?>');
    }

The problem is that the if statement runs again (when refreshing/reloading the page) even though $q has been set from last time the .php file ran.

每个 PHP 脚本处理一个 HTTP 请求。当脚本完成时,它的所有上下文(HTTP 请求、HTTP 响应、变量等)都会被销毁。新请求由脚本的新实例处理,该实例对其先前的调用一无所知。

如果您需要将信息从 PHP 脚本的一次执行传递到下一次执行,您可以使用 sessions。但是,解释会话的工作原理是一个过于宽泛的主题,无法 [so] 回答。