【问题标题】:Php Mysqli simple class method for INSERT, UPDATE, DELETE and Search用于 INSERT、UPDATE、DELETE 和 Search 的 PHP Mysqli 简单类方法
【发布时间】:2016-08-26 08:04:54
【问题描述】:

我的 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

//向table_1表插入值

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

【问题讨论】:

标签: php class methods mysqli


【解决方案1】:

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

在开始上课之前,您需要大量练习原始 API 函数,并学习如何使用它们。否则,你的班级将只是一座草屋,轻轻一碰就会崩溃。

现在解决您的问题。

要解决这个问题,您需要了解一个非常重要的数学概念,即“empty result is not an error”。 10 - 5 - 5 = 0 并不意味着您的计算有错误!它仅仅意味着结果为零。

这里完全一样。当数据库没有返回任何行时,并不意味着存在错误。它只是意味着有零(无)数据要返回。

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

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

因此,无需检查 execute() 结果,只需将行放入变量中,然后检查它是否包含任何内容。

【讨论】:

  • 你说得对,我的方法只是一个陶罐,但实际上我只是检查方法是否有效,就像 PDO 一样,这就是我真正喜欢 PDO 的原因。无论如何,这意味着在我获取结果并使用参数检查正确的条件之前,我无法检查查询返回 true 还是 false?
  • 事实上,在 PDO 中你也完全一样。您也不能为此目的使用 PDO 检查 execute() 结果。是的,要查看您的查询是否返回任何内容,您需要获取它。此外,这是非常合乎逻辑的。你不打算使用那些选定的数据吗?然后你需要获取它无论如何都要获取它
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2013-08-29
  • 2011-05-16
  • 2013-10-25
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多