PHP遍历数组并执行语句

时间:2019-12-12 21:38:07

标签: php pdo

我有这段代码可以通过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()构造这些部分,但要理解,出于安全原因,这不是一个安全的主意。

我只需要按照我的代码进行循环,而不必指定每个可能的准备数量?价值观。 有人可以帮忙吗?抱歉newb问题,但我目前正在学习PHP。

2 个答案:

答案 0 :(得分:3)

您根本不需要任何循环。

只需几行代码,您就能获得所需的结果;

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

答案 1 :(得分:0)

您可以使用array_shift删除第一个元素:

// 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
    $arr   = $sqlarray;  // Make a copy
    $first = array_shift($arr);  // Remove the first element
    $stm->execute($arr);  // Execute query with resulting array

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

    // Return result    
    return $result;