如何更新一个表中的多行(mysql、php、pdo)
问题是,当我将文本区域留空时,我希望它删除该条目 我有一个表,我想在其中更新主键(RegNo)和(Name) 我尝试了几种方法如何更新一个表中的多行(mysql、php、pdo),php,mysql,pdo,Php,Mysql,Pdo,问题是,当我将文本区域留空时,我希望它删除该条目 我有一个表,我想在其中更新主键(RegNo)和(Name) 我尝试了几种方法 $names = [ ['reg'=> $_POST['s1_id'], 'name'=> $_POST['s1_name']], ['reg'=> $_POST['s2_id'], 'name'=> $_POST['s2_name']], ['reg'=> $_POST['s3_id'], '
$names = [
['reg'=> $_POST['s1_id'], 'name'=> $_POST['s1_name']],
['reg'=> $_POST['s2_id'], 'name'=> $_POST['s2_name']],
['reg'=> $_POST['s3_id'], 'name'=> $_POST['s3_name']]
];
$query="update students SET Name=:Name WHERE RegNo=:reg And
ProjectID='$id'";
foreach ( $names as $name)
{
try
{
$stmt = $conn->prepare( $query );
$stmt->bindParam(':Name', $name['name']);
$stmt->bindParam(':reg', $name['reg']);
$result = $stmt->execute();
$msg = "Record updated";
//header("location:adminhome.php");
}
catch(PDOException $ex)
{
$msg = $ex -> getMessage();
}
}
通过这种方式,我只能更新名称列。如何更新RegNo和Name。我不熟悉后端编程。我不知道如何做到这一点 像这样的?我只在
集合中添加了,RegNo=:reg
这个,因为reg已经绑定了,我想这就是您需要添加的全部内容
我更新了我的答案,因为当您发送一个更新的RegNo和您的数据结构时,它将永远不会匹配。所以你应该发送两个RegNo,一个旧的,一个新的
对于删除,我定义了两个查询,一个用于删除,一个用于更新。在我们更新结果之前,我在foreach
中检查新学生ID($name['reg\u set']
)是否为空,如果为空,我们将运行$query\u delete
,否则我们将运行$query\u update
$names = [
['reg'=> $_POST['s1_id'], 'reg_set'=> $_POST['s1_id_set'], 'name'=> $_POST['s1_name']],
['reg'=> $_POST['s2_id'], 'reg_set'=> $_POST['s2_id_set'], 'name'=> $_POST['s2_name']],
['reg'=> $_POST['s3_id'], 'reg_set'=> $_POST['s3_id_set'], 'name'=> $_POST['s3_name']]
];
$query_delete="DELETE FROM students WHERE RegNo=:reg And ProjectID='$id'";
$query_update="UPDATE students SET Name=:Name, RegNo=:reg_set WHERE RegNo=:reg And
ProjectID='$id'";
foreach ( $names as $name)
{
try
{
if(empty($name['reg_set'])){
$stmt = $conn->prepare( $query_delete );
$stmt->bindParam(':Name', $name['name']);
$stmt->bindParam(':reg', $name['reg']);
$result = $stmt->execute();
$msg = "Record deleted";
}else{
$stmt = $conn->prepare( $query_update );
$stmt->bindParam(':Name', $name['name']);
$stmt->bindParam(':reg', $name['reg']);
$stmt->bindParam(':reg_set', $name['reg_set']);
$result = $stmt->execute();
$msg = "Record updated";
}
//header("location:adminhome.php");
}
catch(PDOException $ex)
{
$msg = $ex -> getMessage();
}
}
如果我看不出它是完全错误的,那么您将一次又一次地覆盖同一个数据集(所有数据集都带有prejection=$id)。还是有一个我们看不到的外部循环?您只是SET
tingName=:Name
@Jeff此代码工作正常,但它是唯一更新的名称。我想同时更新RegNo和Name@Mehdi是的,我的问题是我们如何设置两者?从哪里我可以得到“$\u POST['s1\u id\u set']”这个值?@J Quest你在吗?是的,我在,嗯,你必须随表格一起发送。你从哪里收到s1_id?@J任务从我发送的表单中
$names = [
['reg'=> $_POST['s1_id'], 'reg_set'=> $_POST['s1_id_set'], 'name'=> $_POST['s1_name']],
['reg'=> $_POST['s2_id'], 'reg_set'=> $_POST['s2_id_set'], 'name'=> $_POST['s2_name']],
['reg'=> $_POST['s3_id'], 'reg_set'=> $_POST['s3_id_set'], 'name'=> $_POST['s3_name']]
];
$query_delete="DELETE FROM students WHERE RegNo=:reg And ProjectID='$id'";
$query_update="UPDATE students SET Name=:Name, RegNo=:reg_set WHERE RegNo=:reg And
ProjectID='$id'";
foreach ( $names as $name)
{
try
{
if(empty($name['reg_set'])){
$stmt = $conn->prepare( $query_delete );
$stmt->bindParam(':Name', $name['name']);
$stmt->bindParam(':reg', $name['reg']);
$result = $stmt->execute();
$msg = "Record deleted";
}else{
$stmt = $conn->prepare( $query_update );
$stmt->bindParam(':Name', $name['name']);
$stmt->bindParam(':reg', $name['reg']);
$stmt->bindParam(':reg_set', $name['reg_set']);
$result = $stmt->execute();
$msg = "Record updated";
}
//header("location:adminhome.php");
}
catch(PDOException $ex)
{
$msg = $ex -> getMessage();
}
}