使用动态参数(数组)的 PDO 查询

PDO query using dynamic parameter (arrays)

我正在开发一个函数,旨在使用 PDO 查询数据库。我正在使用数组来执行。我收到错误 HY093。下面是我的代码

//my function 
function test_function($statement,$data,$connect)
{
    $gg = implode(',',$data);
    $sth = $connect->prepare($statement);
    $sth ->execute(array($gg));
    $r_result = $sth->fetch();
    $show_result = $r_result['0'];
    return $show_result;
}

$datas = array("':ids' => 1"," ':stats' => 1");
$showsh = test_function("SELECT COUNT(*) FROM table WHERE col1 > :ids AND col2 = 
    :stats",$datas,$con);
echo $showsh;   

任何指导都会有所帮助。

$datas 重构为 [":ids" => 1, ":stats" => 1]
然后编辑函数:

function test_function($statement,$data,$connect)
{
    $sth = $connect->prepare($statement);
    $sth ->execute($data);
    $r_result = $sth->fetch();
    $show_result = $r_result['0'];
    return $show_result;
}

如果您不能更改 $datas 格式,则必须在代码中重构它。类似于:

$correctData = [];
foreach ($datas as $item) {
    $elements = explode("=>", $item);
    $key = preg_replace("/\s\'/", "", $elements[0]);
    $element = preg_replace("/\s\'/", "", $elements[1]);
    $correctData[] = [$key => $element];
}
$showsh = test_function("SELECT COUNT(*) FROM table WHERE col1 > :ids AND col2 = 
    :stats",$correctData,$con);

已编辑: preg_replace("(/\s)(\')/", "",...preg_replace("/\s\'/", "",...

您的第一个错误是在创建数组时。您正在创建一个包含 2 个字符串的数组,而不是包含 2 个 key/value 对的数组。应该是这样的:

$datas = array(':ids' => 1,':stats' => 1);

接下来是函数内部。您正在将 $data 变量转换为字符串,然后将其在数组内部传递到您的查询中。忘记所有这些,只需将 $data 传递到您的执行中即可。

$sth = $connect->prepare($statement);
$sth ->execute($data);

谢谢 Aynber 的回答。我正在使用 ?而不是 :.在这个答案中我没有使用关联数组。

function test_function($statement,$data,$connect)
{
    $sth = $connect->prepare($statement);
    $sth ->execute($data);
    $r_result = $sth->fetch();
    $show_result = $r_result['0'];
    return $show_result;
}
$datas = array(1,1);
$showsh = test_function("SELECT COUNT(*) FROM table WHERE col1 >? AND col2 = ?",$datas,$con);
echo $showsh;