使用 PDO Execute 执行预构建阵列

Executing pre-build-up array with PDO Execute

我正在尝试使用 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();
}   

查看页面代码

$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...)) 并未实际执行。

我做错了什么,我还应该怎么做?

这是您可以使用的示例:

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() 函数,而不是字符串。

设法做到这样:

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));