如何将多个动态行插入数据库

2024-07-01

我有一个使用 php 和 jQuery 创建的多行动态表。这是查看表格的链接 https://jsfiddle.net/soumyar/c8w2Lrk8/.

一切工作正常,除了当我将数据插入数据库时​​,序列号不按顺序保存。我的插入查询如下:

for($i = 0; $i < count($_POST['C_Objectives']); $i++)
{
    $sql = "INSERT INTO Appraisal_Objectives (Serial_Number,Objectives,Measures,Targets,subtotal,Corporate_Objective,Row_Number,ID) Values ('$formno','||<==','==','==','".$_POST['SubTotals'][$i]."','".$_POST['C_Objectives'][$i]."','".$_POST['SNo'][$i]."','$statement')";
    $stmt = sqlsrv_query($conn, $sql);
    if($stmt === false)
        die(print_r(sqlsrv_errors(), true));
    else
        echo " ";
}

for($i = 0; $i < count($_POST['Measures']); $i++)
{
    $sql = "INSERT INTO Appraisal_Objectives (Serial_Number,Objectives,Measures,Targets,Weightage,Row_Number,target_date,ID) VALUES ('$formno','".$_POST['Objectives'][$i]."','".$_POST['Measures'][$i]."','".$_POST['Achievement'][$i]."','".$_POST['Weightage_Target'][$i]."','".$_POST['SNo'][$i]."','".$_POST['Date_Target'][$i]."','$statement')"; 
    $stmt = sqlsrv_query($conn, $sql);
    if($stmt === false)
        die(print_r(sqlsrv_errors(), true));
    else
        echo " ";
}

序列号保存在列中行号,使用$_POST['SNo'][$i]。是否可以使用 1 个插入查询来保存两个动态行,以便按顺序保存序列号?

这是$_POST数组结果:

    [Row_Number] => Array
        (
            [0] => 1
            [1] => 2
        )

    [C_Objectives] => Array
        (
            [0] => A
            [1] => B
        )

    [Objectives] => Array
        (
            [0] => a1
            [1] => a4
            [2] => a7
            [3] => b1
        )

    [Measures] => Array
        (
            [0] => a2
            [1] => a5
            [2] => a8
            [3] => b2
        )

    [Achievement] => Array
        (
            [0] => a3
            [1] => a6
            [2] => a9
            [3] => b3
        )

    [Date_Target] => Array
        (
            [0] => 2016-09-09
            [1] => 2016-09-09
            [2] => 2016-09-09
            [3] => 2016-09-09
        )

    [Weightage_Target] => Array
        (
            [0] => 25
            [1] => 25
            [2] => 25
            [3] => 25
        )

    [SNo] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
            [3] => 6
        )

    [SubTotals] => Array
        (
            [0] => 75
            [1] => 25
        )

    [GrandTotal] => 100
)

我还尝试使列自动递增,但尚未按照在前端输入的顺序保存数据。


您的插入存在性能问题。请更改插入数据库的方式。您可以在一个查询中完成所有这些操作。即使第一个“for”有 20 个循环,第二个“for”有 20 个循环。

回答你所问的问题

如果你想按 $_POST['SNo'] 顺序插入,请更改此行

for($i = 0; $i < count($_POST['C_Objectives']); $i++)

to the

foreach($_POST['SNo'] as $i)

如果您需要一次插入多个,只需执行以下操作:

INSERT INTO Appraisal_Objectives (Serial_Number,Objectives,...)
VALUES (Value1,Value2,...), (Value1,Value2,...)

这是你必须做的

在您的代码中,您在 6 个查询中执行了相同的查询。如果 $_POST['Measures'] 或 $_POST['C_Objectives'] 数组长度更长,它甚至可以超过 6。 您需要将它们放在一个查询中,当您不需要设置该值时,只需将其设置为列默认值即可。例如 NULL

像这样的事情:

//first we create $values array. it contains all values that you need to insert to the db
$values = array();
$j=0;

for($i = 0; $i < count($_POST['C_Objectives']); $i++){
    $values[$j]['Serial_Number'] = $formno;
    $values[$j]['Objectives'] = '||<==';
    //and fill others here
    //fill all cols that you wrote inside your query with the correct order
    $j++;
}

for($i = 0; $i < count($_POST['Measures']); $i++){
    $values[$j]['Serial_Number'] = $formno;
    $values[$j]['Objectives'] = $_POST['Objectives'][$i];
    //and fill others here
    //fill all cols that you wrote inside your query with the correct order
    $j++;
}

//now create (value1,value2,...),(value1,value2,...),...
$query = NULL;
foreach($values as $value){
    $tmp = NULL;
    foreach($value as $v){
        $tmp .= ($v=='')? 'NULL,' : "'$v',";
    }
    $tmp = rtrim($tmp,',');
    $query .= "($tmp),";
}
$query = rtrim($query,',');

//Now Insert
$sql = "INSERT INTO Appraisal_Objectives (Serial_Number,Objectives,...) VALUES $query";

在这个例子中,我只是向您展示了如何做到这一点。请记住,您必须检查 $v 并根据您的列类型准备它。检查是否$_POST[KEY]已设置并且它是数组。如果出现以下情况,请勿插入数据库$query是空的。

关于您的代码非常重要

如果这不是您的原始代码,则没有问题,但如果是,请更改您在查询中使用 $_POST 的方式。它的安全性非常低。至少你需要在使用之前验证它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将多个动态行插入数据库 的相关文章

  • 下拉列表在 php 中保留先前选择的值

    我在 php 中创建了一个个人资料页面 用户使用 html 下拉列表选择性别 html代码如下 Gender
  • 使用 php 脚本从不同网站读取文件

    如何从完全不同的服务器读取文件的内容 然后显示内容 我稍后将更改代码以正确地使用返回的信息 您可以使用file get contents http php net file get contents or cURL http php net
  • WebSocket 已处于 CLOSING 或 CLOSED 状态。

    我尝试使用 Javascript PHP 和 Wamp 执行 WebSocket 但在发送时出现错误 WebSocket 已处于 CLOSING 或 CLOSED 状态 我已经使用了源代码here http sii rennes devel
  • 什么是行锁、页锁和表锁?当它们被收购时?

    我想详细了解数据库引擎获取的不同类型的锁 What are 行锁 页面锁定 表锁 页面实际上是什么 据我所知 行 代表一条记录 表 代表表中的所有记录 但相对于表而言 页是什么 数据库引擎何时获取这些锁 场景 请帮助我理解这些概念 Row
  • 如何在另一个 php 脚本的后台运行 php 脚本(如更新按钮)

    当我按下 更新 按钮时 我将如何运行一个 php 脚本 然后它将运行脚本 x1 php 没有回显或其他输出 成功或失败 然后更新当前页面 我知道更新部分可以使用 ajax 完成 但我不确定如何以及如何让 x1 php 脚本在后台运行并在完成
  • 如何在视图中调用存储过程?

    如何调用在视图中返回数据的存储过程 这可能吗 SQL Server 中不允许这种构造 内联表值函数可以作为参数化视图执行 但仍然不允许像这样调用 SP 下面是一些交替使用 SP 和内联 TVF 的示例 您会发现 TVF 更加灵活 它基本上更
  • SQL:使用 1 个查询更新一行并返回列值

    我需要更新表中的一行 并从中获取列值 我可以这样做 UPDATE Items SET Clicks Clicks 1 WHERE Id Id SELECT Name FROM Items WHERE Id Id 这会生成 2 个对该表的计划
  • php 字符串与通配符 * 匹配?

    我想提供将字符串与通配符匹配的可能性 Example mystring dir folder1 file pattern dir file stringMatchWithWildcard mystring pattern gt Return
  • 向 SQL Server 用户授予执行权限以仅运行特定作业

    我请求创建可由特定 SQL 用户运行的 SQL Server 代理作业 如何在不授予用户执行权限的情况下完成此操作sp start job存储过程意味着他也可以运行所有其他禁止的作业 如果不授予用户对 sp start job 存储过程的执
  • HTACCESS 404 错误无法正常工作

    问题 在此服务器上找不到请求的 URL welcome php 此外 尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误 事情是这样的 当我访问 www mysite com page 时它工作正常 如果
  • 在ubuntu上安装php70-gd

    最近新的php7已经发布了 但是 当我尝试安装 gd 包时 找不到该库 我已经尝试过 sudo apt get install php70 gd and sudo apt get install php70 php gd 有人知道 gd 是
  • 插入正确的登录详细信息(即用户名和密码)、php 和 jquery 中的代码后,我的代码登录失败

    我有以下代码 php 和 jquery 用于学生和教师的登录 使用相同的表单进行访问 在我的系统中 管理员可以创建学生和教师 创建后 详细信息将保存到数据库中 保存的详细信息应该用于登录其管理面板 但是 问题是 当学生或教师想要使用管理员提
  • 有 PHP 函数可以解决这个问题吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对不起 我希望这并不奇怪或什么 我该如何修复这个编码 您遇到的情况是数据以一种编码写入并解释为另一种编码的结果 您需要确保请求输入的格
  • php脚本在某个页面停留几秒钟并重定向

    有没有办法让页面在 php 中显示几秒钟并重定向到另一个页面 元重定向可能是您想要的 但是您CAN在 PHP 中也执行此操作 如下所示 其中 10 是等待的秒数
  • Nginx 和 Apache

    使用Nginx 图像 css js 服务器静态数据和使用Apache服务器动态数据 应用程序代码 数据库 有用吗 让 Nginx 提供静态图像不仅很有用 而且让 Nginx 代理 Apache 也是一个巨大的胜利 这是因为缓慢的客户端会导致
  • MacOS Sierra 上未找到 OpenSSL

    我正在尝试安装 PHP MongoDB 驱动程序 但安装失败 因为它找不到 OpenSSL Users username mongo php driver src libmongoc src mongoc mongoc crypto ope
  • 使用 PHP 删除字符串的前 4 个字符

    如何使用 PHP 删除字符串的前 4 个字符 你可以使用substr http php net manual en function substr php函数返回从第 5 个字符开始的子字符串 str The quick brown fox
  • 为什么apache不能同时处理来自同一浏览器的多个请求

    我不太确定如何正确地表达这个问题 所以我将从我遇到的场景开始 我的网络应用程序中有一些处理时间比我希望用户等待再次控制页面的时间要长 所以我决定通过 ajax 请求来处理它 问题是 即使我将此请求卸载到 ajax 请求中 在原始处理器繁重的
  • 弄清楚为什么我收到资源 ID #5 错误

    这是我的代码的一部分 回显是为了测试该值 它给了我资源 ID 5 id mysql query SELECT id FROM users WHERE firstname submittedfirstname AND lastname sub
  • awk 单引号或双引号的用法

    为什么 awk 命令使用单引号和双引号不能产生相同的结果 root vm90 root who awk print 2 root vm90 root who awk print 2 我想在 PHP shell exec 函数中使用 awk

随机推荐