mysqli_query 不区分 TRUE 和 FALSE

mysqli_query does not differentiate TRUE from FALSE

几个月前开始学习和工作PHP和MySQL,每天学一点点,有一个问题解决不了,找了很多。这很简单。直到昨天,我的代码 运行 都还不错,但我不知道自己做了什么。下面是我的问题所在的这部分代码的简化。

  1. 主要objective:

我需要在特定的 table (tab_classe) 进行搜索。我需要这个查询 returns 只有在 之前存储在变量 ($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 中存储什么值并不重要,我的查询总是 return !== FALSE,据我所知 return 存在一行 where turma LIKE '$turma',但即使存储和比较不存在的值,它 return 也始终为假。

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

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

如果您想查看查询是否匹配任何行,则必须检查结果。但是,由于您应该始终使用准备好的语句,我将向您展示如何使用 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
}