Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用pdo的foreach循环多数组值更新_Php_Arrays_Pdo - Fatal编程技术网

Php 使用pdo的foreach循环多数组值更新

Php 使用pdo的foreach循环多数组值更新,php,arrays,pdo,Php,Arrays,Pdo,这里,$roll是数组值,$score也是数组值。在这里 例如,所有卷号的上次值更新 $roll=1,2,3,4和$score(10,20,30)我不知道,但这里是所有卷号的30值更新。 请帮帮我。。谢谢..目前,您正在保存所有卷的每个分数,因此最后一个分数将始终设置为您的卷 错误在于您使用了两个foreach循环,但您只需要一个,您只需要将掷骰和分数彼此匹配 如果您完全确定数组的长度相同并且索引方式相同(具有相同的键-您可以使用PHP函数来确保),则可以使用for循环 <?php $ro

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

目前,您正在保存所有卷的每个分数,因此最后一个分数将始终设置为您的卷

错误在于您使用了两个foreach循环,但您只需要一个,您只需要将掷骰和分数彼此匹配

如果您完全确定数组的长度相同并且索引方式相同(具有相同的键-您可以使用PHP函数来确保),则可以使用for循环

<?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()));
}
?>
然后像往常一样使用foreach循环

编辑:根据请求,一个数组\u组合示例:

array_combine($roll, $score);

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

我想

<?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;
    }
}

?>
应为:-

$stmt->bindparam(1,$score);
修改的代码块:-

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

你把你的
global$pdo超出数据库连接的范围。然而,不建议使用这种方法。您的
会话_start()在哪里?另外,这是错误的
$stmt->bindparam(2,$rollno)你能解释一下代码的例子吗?如果我在这里为用户循环无值更新到数据库,那么我有点搞不清楚这里到底发生了什么。您应该尝试进行一些调试,然后var_dump到底绑定了什么,这将帮助您了解到底发生了什么。您可以在这里解释array_combine()示例吗
$stmt->bindparam(1,$key);
foreach( $roll as $rollno)
{
    $stmt->bindparam(2,$rollno);
    foreach( $score as $key)
    {
    $stmt->bindparam(1,$key);
    $stmt->execute();
    }
}