PDO:创建可重用代码

PDO : creating a reusable code

我正在尝试在 PDO 中创建可重用代码。

这是我的代码。

$myClass = new main_c();
$condition = "email_address = :email_address AND password = :password";
$array = array('email_address' => 'yiihii@yahoo.com', 'password' => '98467a817e2ff8c8377c1bf085da7138');
$row = $myClass->get('user', $condition, $array, $db);
print_r($row);

这是我的函数。

      public function get($tablename, $condition, $array, $db){

        $stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
        foreach($array as $k=>$v){

            $stmt->bindParam(":$k", $v);
        }

        try{
            $stmt->execute();
        }catch(PDOException $e){
            $error = new main_c();
            echo $error->error_handling($e);
        }

        return $row=$stmt->fetch(PDO::FETCH_ASSOC);
        }

我试过在条件中省略 AND 并只放置一个 where 子句并且它起作用了。我认为 foreach 中存在问题。不过我不确定。

您绑定的不是值,而是参数,因此在您的循环中,您仅将一个变量 $v 绑定到键 $k。两次。当您执行查询时,这些变量将包含循环最后一次迭代的值。

您需要更改 bindParam() to bindValue()

但是,由于您没有使用 bindParam() / bindValue() 的第三个参数 - 强制数据类型 - 您可以跳过整个循环并执行:

try {
  $stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
  $stmt->execute($array);
  ...