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] 回答。
所以在我的程序中使用 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] 回答。