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。


qq_花开花谢_0
浏览 116回答 2
2回答

慕姐4208626

你根本不需要任何循环。你应该能够只用几行代码就得到你想要的结果;$pdo = new PDO($sqldsn, $sqluser, $sqlpass, $sqlopt);// Prepare query$stm = $pdo->prepare($query);$arr = array_values(func_get_args()); //gets rid of your foreach looparray_shift($arr); //gets rid of first element of array$stm->execute($arr);return $stm->fetchAll();

Cats萌萌

您可以删除第一个元素array_shift:// PDO connect&nbsp; &nbsp; $pdo = new PDO($sqldsn, $sqluser, $sqlpass, $sqlopt);&nbsp; &nbsp; // Prepare query&nbsp; &nbsp; $stm = $pdo->prepare("$query");&nbsp; &nbsp; // Cycle through additional values&nbsp; &nbsp; foreach(func_get_args() as $arg) {&nbsp; &nbsp; $sqlarray[] = $arg;&nbsp; &nbsp; }&nbsp; &nbsp; // Execute query with values&nbsp; &nbsp; $arr&nbsp; &nbsp;= $sqlarray;&nbsp; // Make a copy&nbsp; &nbsp; $first = array_shift($arr);&nbsp; // Remove the first element&nbsp; &nbsp; $stm->execute($arr);&nbsp; // Execute query with resulting array&nbsp; &nbsp; // Fetch all&nbsp; &nbsp; $result = $stm->fetchAll();&nbsp; &nbsp; // Return result&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return $result;
打开App,查看更多内容
随时随地看视频慕课网APP