我有这段代码可以通过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。
答案 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;