使用PDO Execute执行预构建数组

时间:2015-01-13 10:29:18

标签: php arrays database function pdo

我正在尝试使用PDO将任何查询传递给函数。 我已经通过循环函数构建了数组并尝试将其插入到execute(array(....))函数中,但它没有通过。

功能代码

    public function ShowData($sql,$variable)
{
    $execute_string = "";
    echo "<pre>";
    print_r($variable);
    echo "</pre>";
    $q = $this->conn->prepare($sql);
    for($i = 0; $i < sizeof($variable); $i++)
    {
        if($i != 0) $execute_string .= ",";
        $placeholder = $i + 1;
        $execute_string .= "':$placeholder' => '".$variable[$i]."'";
    } 
    echo $sql."<br>";
    echo $execute_string;
    $q->execute(array($execute_string));
    echo "<br>Execute Succeeded";
    return $row = $q->fetchAll();
}   

VIEWPAGE CODE

$author = "Nemoza";
$name = "MBICO_mailer";
$project = $data->ShowData("SELECT * FROM mbico_projects WHERE author=:1 AND name=:2", array($author,$name));

从功能调试输出

Array
(
    [0] => Nemoza
    [1] => MBICO_mailer
)
SELECT * FROM mbico_projects WHERE author=:1 AND name=:2
':1' => 'Nemoza',':2' => 'MBICO_mailer'

但是,没有打印'Execute Succeeded'文本,并且execute(array ...))实际上没有执行。

我做错了什么,我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

这是您可以使用的示例:

public function ShowData($sql,$variable) {
    $bind = [];
    foreach ($variable as $key => $value) {
        $ph = $key+1;
        $bind[":" . $ph] = $value;
    }
    $stmt = $this->conn->prepare($sql);
    $stmt->execute($bind);

    return $stmt->fetchAll();

}

它的使用方式如下:

$sql = 'select * from users where username = :1 or username = :2';
$bind = ['123', '456'];
$db->ShowData($sql, $bind);

如您对问题的评论中所述,您需要将数组发送到execute()函数,而不是字符串。

答案 1 :(得分:0)

管理这样做:

public function ShowData($sql,$variable)
{
    $execute_string = array();
    $q = $this->conn->prepare($sql);
    foreach($variable as $item) 
    {
        $execute_string[] = $item;
    }
    $q->execute($execute_string);
    return $q->fetchAll();
}

$project = $data->ShowData("SELECT * FROM mbico_projects WHERE author=? AND title=?", array($author, $title));