首页 > 解决方案 > PHP循环遍历数组并执行语句

问题描述

我有这段代码用于使用 PDO 将准备好的值插入 MySQL,但我正在寻找一种方法来用循环整理它,以避免重复:

// PDO connect
    $pdo = new PDO($sqldsn, $sqluser, $sqlpass, $sqlopt);

    // Prepare query
    $stm = $pdo->prepare("$query");

    // Cycle through additional values
    foreach(func_get_args() as $arg) {
    $sqlarray[] = $arg;
    }

    // Execute query with values
    $count = count($sqlarray);

    if ($count == "2") { $stm->execute([$sqlarray[1]]); } 
    if ($count == "3") { $stm->execute([$sqlarray[1], $sqlarray[2]]); }
    if ($count == "4") { $stm->execute([$sqlarray[1], $sqlarray[2], $sqlarray[3] ]); }
    if ($count == "5") { $stm->execute([$sqlarray[1], $sqlarray[2], $sqlarray[3], $sqlarray[4] ]); } 
    if ($count == "6") { $stm->execute([$sqlarray[1], $sqlarray[2], $sqlarray[3], $sqlarray[4], $sqlarray[5] ]); }
    if ($count == "7") { $stm->execute([$sqlarray[1], $sqlarray[2], $sqlarray[3], $sqlarray[4], $sqlarray[5], $sqlarray[6] ]); }


    // Fetch all
    $result = $stm->fetchAll();

    // Return result    
    return $result;

我试过这样循环,但我没有得到任何结果(除了数组条目的数量):

    for ($i = 1; $i<=$count; $i++){
        echo $i;
        $stm->execute([$sqlarray[$i]]);
    }

我还尝试使用 eval() 构建这些部分,但出于安全原因,这不是一个安全的想法。

我只需要它按照我的代码循环,但不必指定每个可能的准备数量?价值观。任何人都可以帮忙吗?抱歉这个新手问题,但我目前正在学习 PHP。

标签: phppdo

解决方案


你根本不需要任何循环。

你应该能够只用几行代码就得到你想要的结果;

$pdo = new PDO($sqldsn, $sqluser, $sqlpass, $sqlopt);

// Prepare query
$stm = $pdo->prepare($query);

$arr = array_values(func_get_args()); //gets rid of your foreach loop
array_shift($arr); //gets rid of first element of array

$stm->execute($arr);

return $stm->fetchAll();

推荐阅读