Php Mysqli用于插入、更新、删除和搜索的简单类方法

Php Mysqli用于插入、更新、删除和搜索的简单类方法,php,class,methods,mysqli,Php,Class,Methods,Mysqli,我的CRUD类中有以下代码 //function to execute prepared statement query //$sql = select , insert, update and or delete query => insert into table(col,col,col,...col) values(?,?,?,...?); //$dataTypes = "ssidb", it could be any char in s=>string, i=>inte

我的CRUD类中有以下代码

//function to execute prepared statement query
//$sql = select , insert, update and or delete query => insert into table(col,col,col,...col) values(?,?,?,...?);
//$dataTypes = "ssidb", it could be any char in s=>string, i=>integer, d=>double and b=>blob data
//$param = $val1,$val2,$val3,....$valn, this is an option coma separated values to bind with query
public function dbQuery($sql,$dataTypes="",$param=""){
    try{
        $this->connect();
        $stmt = $this->con->stmt_init();
        $stmt = $this->con->prepare($sql);
        $stmt->bind_param($dataTypes, $param);          
        if($stmt->execute() === true){
            return true;    
            }
        else{
            return false;   
            }
        }catch(Exception $e){
            $this->errorMsg = $e->getMessage(); 
        }
        $this->closeConnection();
    }
我从我的索引页调用此方法,如下所示:

 if(isset($_POST['btnSearch'])){
 //search for some record with primary key
 $sno = intval($_POST['sno']);
 $sql = "SELECT sno,std_name,email,roll_number FROM table_1 WHERE sno = ?";
 $dTypes = "i";
 $params = $sno;
if($db->dbQuery($sql,$dTypes,$params)){
    echo('Record exists');
    }
else{
    echo('Record did not found'.$db->errorMsg);
    }
}//search for record
//将值插入表1

无论是否存在任何记录,都会返回true?
这段代码出了什么问题?

您的代码中有许多缺陷,即使修复了这个特定问题,它也永远不会按预期工作

在开始一个类之前,您需要大量练习原始API函数,并学习如何用心使用它们。否则,你的班级将只是一个草屋,一触即碎

现在谈谈你的问题

要解决这个问题,您需要理解一个非常重要的数学概念,即“空结果不是错误”。10-5-5=0并不意味着你的计算有错误!这仅仅意味着结果为零

这里也同样如此。当数据库不返回任何行时,并不意味着存在错误。它只是表示没有(没有)数据要返回

反之亦然:如果没有错误,并不意味着找到了行

要查看是否返回了任何行,您需要获取该行。


因此,与其检查execute()result,不如将您的行提取到一个变量中,然后检查它是否包含任何内容。

您的代码中有许多缺陷,即使在修复了这个特定问题之后,它也永远无法按预期工作

在开始一个类之前,您需要大量练习原始API函数,并学习如何用心使用它们。否则,你的班级将只是一个草屋,一触即碎

现在谈谈你的问题

要解决这个问题,您需要理解一个非常重要的数学概念,即“空结果不是错误”。10-5-5=0并不意味着你的计算有错误!这仅仅意味着结果为零

这里也同样如此。当数据库不返回任何行时,并不意味着存在错误。它只是表示没有(没有)数据要返回

反之亦然:如果没有错误,并不意味着找到了行

要查看是否返回了任何行,您需要获取该行。


因此,不必检查execute()结果,只需将您的行提取到一个变量中,然后检查它是否包含任何内容。

查阅以下链接,并将其应用到您的代码中。页面中没有显示错误,我添加了错误报告(E\u ALL);ini设置(“显示错误”,1);在我的索引页面上,查阅以下链接并将其应用于代码。页面中没有显示错误,我添加了错误报告(E_ALL);ini设置(“显示错误”,1);在我的索引页面上,你是对的,我的方法只是一个粘土罐,但事实上我只是在检查这个方法是否有效,是否像PDO,这就是为什么我真的喜欢PDO。无论如何,这意味着在我获取结果并使用params检查正确的条件之前,我无法检查查询是否返回true或false?事实上,在PDO中,您的情况完全相同。也不能为此目的使用PDO检查execute()结果。是的,要查看查询是否返回任何内容,您需要获取它。此外,这很合乎逻辑。你不打算使用那些选定的数据吗?然后你需要去拿它,不管怎样,你是对的,我的方法只是一个粘土罐,但事实上我只是在检查这个方法是否有效,是否像PDO,这就是为什么我真的喜欢PDO。无论如何,这意味着在我获取结果并使用params检查正确的条件之前,我无法检查查询是否返回true或false?事实上,在PDO中,您的情况完全相同。也不能为此目的使用PDO检查execute()结果。是的,要查看查询是否返回任何内容,您需要获取它。此外,这很合乎逻辑。你不打算使用那些选定的数据吗?那你无论如何都得去拿