【问题标题】:mysqli_query does not differentiate TRUE from FALSEmysqli_query 不区分 TRUE 和 FALSE
【发布时间】:2021-11-03 17:07:50
【问题描述】:

几个月前我开始学习和使用 PHP 和 MySQL,每天都学习一点,除了搜索很多,我有一个无法解决的问题。这很简单。我的代码运行良好,直到昨天,我不知道我做了什么。下面,这部分代码的简化是我的问题所在。

  1. 主要目标:

我需要在特定表 (tab_classe) 上进行搜索。我需要此查询仅在存在或不存在任何行的情况下返回,该行之前存储在变量 ($turma) 中的 turma 字段(列)中具有值。

 // table: tab_classe (id(INT), aluno(VARCHAR), prof(VARCHAR), turma(VARCHAR))

    $turma = "A28";
    $str = "select * from tab_classe
    where turma LIKE '$turma'
    limit 1
    ";

    $qry = mysqli_query($conn,$str);

    if ($qry !== FALSE){
        echo "There is a register!";
    }else{
        echo "No registers!";
    }

我尝试了很多变体,最后一个以下:

   if ($qry !== FALSE){
            echo "There is a register!";
    }else if ($qry !== TRUE{
            echo "No registers!";
    }

无论我在变量$turma 存储什么值,我的查询总是返回!== FALSE,我知道它返回有一行where turma LIKE '$turma',但即使存储和比较它也总是返回false不是现有值。

【问题讨论】:

  • 阅读手册请php.net/manual/en/…
  • 好的,谢谢。这正是我所需要的。
  • “但它总是返回 false” 并非总是如此。 !== TRUE 不一定是假的
  • 如果你刚刚开始学习 PHP,那么你应该学习 PDO 而不是 mysqli。 PDO 更容易,更适合初学者。从这里开始phpdelusions.net/pdo & websitebeaver.com/…
  • 好的@Dharman,我会读一下,谢谢。我只是想知道为什么人们在没有反馈的情况下提出负面问题。

标签: php mysql mysqli


【解决方案1】:

mysqli_query() 将返回一个 mysqli_result 对象。它只会在查询出现问题并且您的错误报告静音(这是默认设置)时返回FALSE

检查返回值不会产生任何有用的结果。

如果您想查看查询是否匹配任何行,您必须检查结果。但是,由于您应该始终使用准备好的语句,因此我将向您展示如何使用 PS。

$turma = "A28";

// We are only interested in the fact whether a single row exists
$str = "select * from tab_classe
where turma LIKE ?
limit 1";

$stmt = $conn->prepare($str);
$stmt->bind_param('s', $turma);
$stmt->execute();
$result = $stmt->get_result();

// now check the result by fetching the value
$row = $result->fetch_assoc();
if($row) {
    // The query matched some records
} else {
    // The query DID NOT match anything
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2016-12-02
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多