将php boolean设置为FALSE不起作用

时间:2015-11-16 15:55:00

标签: php

我在名为评估的表格中没有记录

我有一个功能:

function check_assessment_record($p_id, $a_id, $c){
    $dataexistsqry="SELECT * FROM assessments WHERE (pupil_id=$p_id && assessblock_id=$a_id)" ;
    $resultt = $c->query($dataexistsqry);
        if ($resultt->num_rows > 0) { 
            echo '<p>set $de = true</p>';
            $de=TRUE;
        }else{
            echo '<p>set $de = false</p>';
            $de=FALSE;
        }                   
        return $de;
        $dataexists->close();
}; //end function

我这样称呼函数: $thereisdata = check_assessment_record($pupil_id, $assessblock_id, $conn);

然而,当我期待FALSE时,我的功能没有打印出来。当有记录时,它会打印出来。

当我在$ thereisdata中得到结果时,我想检查它是否为TRUE或FALSE但是它不起作用。

我看了php manual boolean page,但没有帮助

3 个答案:

答案 0 :(得分:1)

您似乎使用函数参数中的变量$c将数据库连接作为对象传递。这告诉我,通过创建一个类并使用私有属性/变量,您将获益匪浅。此外,您的代码中有许多错误向我显示您要实现的目标,一些错误是您使用错误变量关闭数据库连接的方式,或者如何在return之后放置关闭连接方法,永远不会达到。

无论如何,我会创建一个数据库类,然后您可以根据需要调用check_assessment_record()等特定函数。

以下是我将如何重做您的代码:

<?php

    class Database {

        private $conn;

        function __construct() {
            $servername = "localhost";
            $username = "root";
            $password = "root";
            $dbname = "test";

            // Create connection
            $this->conn = new mysqli($servername, $username, $password, $dbname);
            // Check connection
            if ($this->conn->connect_error) {
                die("Connection failed: " . $conn->connect_error);
            }
        }

        function check_assessment_record($p_id, $a_id) {
            $sql = "SELECT * FROM assessments WHERE (pupil_id=$p_id && assessblock_id=$a_id)";
            $result = $this->conn->query($sql);
            if ($result->num_rows > 0) {
                echo '<p>set $de = true</p>';
                $de = TRUE;
            } else {
                echo '<p>set $de = false</p>';
                $de = FALSE;
            }
            return $de;
        }

        function __destruct() {
            $this->conn->close();
        }
    }

    $p_id = 1;
    $a_id = 2;
    $db = new Database();
    $record = $db->check_assessment_record($p_id, $a_id);
    var_dump($record);

?>

答案 1 :(得分:0)

你正确使用PDO吗? 对我的打电话通常看起来像;

$aResults = array();

$st = $conn->prepare( $sql );
$st->execute();

while ( $row = $st->fetch() ) {
   //do something, count, add to array etc.
   $aResults[] = $row;
}
// return the results if there is, else returns null
if(!empty($aResults)){return $aResults;}

如果您不想将结果放入数组中,您只需检查是否返回了一列;

$st = $conn->prepare( $sql );
$st->execute();

if(! $st->fetch() ){
  echo 'there is no row';
}

答案 2 :(得分:0)

这是代码

function check_assessment_record($p_id, $a_id, $c){
$dataexistsqry="SELECT * FROM assessments WHERE (pupil_id=$p_id && assessblock_id=$a_id)" ;
$resultt = $c->query($dataexistsqry);
    if ($resultt->num_rows > 0) { 
        echo '<p>set $de = true</p>';
        $de=TRUE;
    }else{
        echo '<p>set $de = false</p>';
        $de=FALSE;
    }                   
    return $de;
    $dataexists->close();
}; //end function

您可以使用if else条件检查返回值

$thereisdata = check_assessment_record($pupil_id, $assessblock_id, $conn);
if($thereisdata){ print_f('%yes data is present%'); }
else{ print_f('% no data is not present %'); }

原因是,某些返回布尔值的函数只包含true值,并将false值视为null,这就是为什么在未找到数据时不打印任何结果的原因。

希望这会对你有所帮助。不要忘记给出您的评论和反馈。