foreach循环使用pdo进行多个数组值更新

时间:2014-01-06 03:59:26

标签: php arrays pdo

<?php
$roll  = $_POST['roll'];
$score = $_POST['a'];
$test  = $_SESSION['test'];
$class = $_SESSION['class'];
print_r($roll);
print_r($score);
global $pdo;
require('connect.php');
$stmt=$pdo->prepare("update atten set $test=? where roll=?");
foreach( $roll as $rollno)
{
    $stmt->bindparam(2,$rollno);
    foreach( $score as $key)
    {
        $stmt->bindparam(1,$score);
        $stmt->execute();
    }
}
if($stmt==false)
{
    die("error".print_r($stmt->errorinfo()));
}
?>

此处$roll是数组值,$score也是数组值。这里 所有卷的最后一次更新值为例 $roll=1,2,3,4$score(10,20,30)我不知道,但这里有30个值更新所有卷号。 请帮帮我..谢谢..

2 个答案:

答案 0 :(得分:0)

目前,您正在针对所有广告系列保存每一个分数,因此最后一个分数将始终设置为您的分数。

错误在于你使用了两个foreach循环,但是你只需要一个,你只需要将滚动和分数相互匹配。

Iff你绝对肯定数组长度相同并且索引方式相同(具有相同的键 - 你可以使用array_values PHP函数来确保)你可以使用for循环

for($i = 0; $i < count($roll); $i++){
    $stmt->bindparam(1, $roll[$i]);
    $stmt->bindparam(2, $score[$i]);
    $stmt->execute();
}

PHP函数array_combine在这里也可能有用,因为你可以这样做:

array_combine($roll, $score);

然后像往常一样使用foreach循环。

编辑:根据要求,使用array_combine示例:

<?php
$roll  = $_POST['roll'];
$score = $_POST['a'];
$test  = $_SESSION['test'];
$class = $_SESSION['class'];
print_r($roll);
print_r($score);
global $pdo;
require('connect.php');
$stmt=$pdo->prepare("update atten set $test=? where roll=?");

if(count($roll) !== count($score))
    die('Arrays are not the same length!');

$rollsToScores = array_combine($roll, $score);

foreach($rollsToScores as $roll => $score){
    $result = $stmt->execute(array($score, $roll));
    if($result === false){
        die("error".print_r($stmt->errorinfo()));
        break;
    }
}

?>

答案 1 :(得分:0)

您正在内循环绑定参数$array中传递$stmt->bindparam(1,$score);

我认为

$stmt->bindparam(1,$score);

应该是: -

$stmt->bindparam(1,$key);

修改后的代码块: -

foreach( $roll as $rollno)
{
    $stmt->bindparam(2,$rollno);
    foreach( $score as $key)
    {
    $stmt->bindparam(1,$key);
    $stmt->execute();
    }
}