PHP PDO数据库类参数传递

时间:2014-04-21 14:03:09

标签: php oop pdo sqlsrv

我想在其中设置一个包含多个参数的数组,将其传递给我的数据库类。目前我只能发送一个参数,但一般来说我的SQL查询都有多个参数。

示例数据库方法:

public function fetchQuery($sql,$params,$conn){
    try{
        $queryparams=array($params);
        $x=$conn->prepare($sql);
        $x->execute($queryparams);
        $rArray = $x->fetchAll(PDO::FETCH_ASSOC);
        return $rArray;
    }catch (Exception $e){
        die( print_r( $e->getMessage() ) );
    }
}

调用数据库方法:

        $params=$vendID;
        $sql = "SELECT Email from Contact WHERE VendID = ?";

 try{
          $emails=$db->fetchQuery($sql,$params,$conn);
          $eCount = count($emails);
           if($eCount>0){
                foreach($emails as $row){
                    $eArray[]=$row['Email'];
                }
            }else{
                echo "No email addresses associated with this vendor";
            }
        }
        catch(Exception $e){
            die( print_r( $e->getMessage() ) );
        }

现在说我的sql查询是这样的:“从联系人中选择*,其中CustID =?和Expired =?” 我如何构建一个数组并将其传递给我的函数?

每次尝试时,我都会得到一个数组到字符串转换错误。

由于

3 个答案:

答案 0 :(得分:3)

  

现在说我的sql查询就像:"从联系人中选择*,其中CustID =?   和过期=?"我将如何构建一个数组并将其传递给我的数组   功能

我会删除代码的$queryparams=array($params);部分,并且即使它只有一个元素,也总是将函数传递给数组。

$params= array($custID);
$sql = "SELECT Email from Contact WHERE VendID = ?";

try{
    $emails=$db->fetchQuery($sql,$params,$conn);

多发性

$params= array($vendID, $expired);
$sql = "Select * from Contact where CustID=? and Expired=?";

try{
    $emails=$db->fetchQuery($sql,$params,$conn);

我个人更喜欢命名参数,我可以使用关联数组:

$sql = "Select * from Contact where CustID= :custId and Expired= :expired";

$params= array(':custId'=>$custID, 
               ':expired'=>$expired
);

答案 1 :(得分:2)

在你的fetchQuery方法中,你可以检查$ params是否已经是一个数组。

<?php
if (is_array($params)) {
    $queryParams = $params;
}
else {
    $queryParams = array($params);
}

答案 2 :(得分:0)

您实际上并不需要此功能。它可以节省您输入几个单词的费用 但同时它限制了您使用PDO。用raw pdo查看你的代码

$stmt = $con->prepare("SELECT Email from Contact WHERE VendID = ?");
$stmt->execute([$vendID]);
$emails = $stmt->fetchAll(PDO::FETCH_COLUMN);
if(!$emails){
    echo "No email addresses associated with this vendor";
}

它比你的功能短3倍 PDO本身已经是一个包装器。一个人需要非常强大的理由和太多的经验才能够熟练地扩展它。