PDO:创建可重用的代码

时间:2015-04-15 07:25:58

标签: php mysql pdo

我正在尝试在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存在问题。我不确定。

1 个答案:

答案 0 :(得分:2)

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

您需要将bindParam()更改为bindValue()

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

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