PHP 从数据库中选择并显示 IF 变量存在



我正在创建一个小型在线网站,该网站的内容在"问题"中。这是我收集的代码:

<?php
$issue_sql = "SELECT * FROM issues WHERE id = '$id'"; // From URL
$issue_res = mysqli_query($con, $issue_sql);
while($issue = mysqli_fetch_assoc($issue_res)){
$issue_id = $issue["id"];
$issue_added = $issue["added"];
$issue_content = $issue["content"];
$issue_endorsed = $issue["endorsed"];
$issue_year = date("Y", strtotime($issue_added));
$issue_date = date("l jS F, Y", strtotime($issue_added));
}
?>

而且我想仅在认可存在时才display认可(在这种情况下确实如此)。所以我的代码是:

<?php
if($issue_endorsed === 1){
$endorsed_sql = "SELECT article FROM issue_endorsed WHERE id = '$issue_id'";
$endorsed_res = mysqli_query($con, $endorsed_sql);
while($endorsed = mysqli_fetch_assoc($endorsed_res)){
$endorsed_article = $endorsed["article"];
$display_endorsed = "
<div class="section">
<div class="sectionText">
<b>We Recommend ...</b>
<br>
... $endorsed_article
</div>
</div>
<div class="contentDivideSecondary"></div>
";
}
}else{
$display_endorsed = "Not Here";
};
?>

问题是,当我稍后在 html 代码中<?php echo display_endorsed; ?>时,我看到的是Not Here而不是实际内容。谁能看出我哪里出了问题?

你在哪里拥有的问题与一件主要的事情有关。MySQL可能以字符串形式返回列endorsed的数据库值。现在你的 if 语句:

if($issue_endorsed === 1){

正在做身份比较。说$issue_endorsed等于 1 的整数吗?这不是真的,因为数据库将其作为字符串返回。将其切换为==解决了这个问题,因为它的类型在比较之前将字符串"1"1成整数。

从这样的问题中要记住的要点是

  1. PHP不是一种无类型的语言,它是一种动态语言。仍然有类型,它们只是在大多数时候很容易切换。
  2. 通常,假设数据库将所有内容作为字符串返回是安全的(某些数据库选项不会)。

最新更新