javascript - 使用 AJAX 和 PHP 将数据数组插入 SQL 中

标签 javascript php arrays ajax performance

我正在尝试使用 AJAX 和 PHP 将数据数组插入到 SQL 中。该数组是用 Javascript 构建的,并传递到 PHP,由 SQL 语句获取数据。应该插入数据,但没有插入。

在我的 PHP 中,我声明了 6 个变量并插入了随机数据来测试查询和数据是否正常工作;确实如此。当我使用“SqlArr”作为不插入的值时。如何使用 AJAX 和 PHP 插入要动态推送到 SQL 数据库的数据数组?

非常感谢任何帮助。

JavaScript:

            var cnt=0;  
            Empdata = 'EmpData' + cnt + '';
            temp={EmpId,WeekEnding,DateOccur,JobNum, Customer, HourValue};
            SqlArr.push({Empdata : temp});

PHP

<?php
include_once 'DbConnectPSI.php';
    global $connect;
    global $record3;
    global $myData3;
    global $var1;
    global $var2;
    global $var3;
    global $var4;
    global $var5;
    global $var6;

    $var1=2;
    $var2=2015-09-12;
    $var3=2015-09-09;
    $var4=2;
    $var5=2;
    $var6=55;


    $SqlArr =$_POST['SqlArr'];

    $myData3="Insert Into EmployeeTimesheets  Values('$SqlArr', getDate())";    
    //$myData3="Insert Into EmployeeTimesheets  Values('$var1','$var2','$var3','$var4','$var5','$var6', getDate())";    

    $record3 = odbc_exec($connect, $myData3);


    odbc_close($connect);
    ?>

数据从 Javascript 传入 SqlArr.push

EmpId=2, WeekEnding=2015-09-12, DateOccur=2015-09-09, JobNum=2, Customer=2, HourValue=55

` 使用Sql Server 2008 R2的表结构

 USE [xx]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[EmployeeTimeSheets](
        [PkId] [bigint] IDENTITY(1,1) NOT NULL,
        [EmpId] [int] NULL,
        [WkEnd] [date] NULL,
        [Day] [date] NULL,
        [Title] [nvarchar](20) NULL,
        [Description] [nvarchar](50) NULL,
        [Value] [float] NULL,
        [TimeStamp] [datetime] NULL,
     CONSTRAINT [PK_EmployeeTimeSheets] PRIMARY KEY CLUSTERED 
    (
        [PkId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

PHP 使用 var_dump 接收数组

enter image description here

最佳答案

您不能像在这一行中那样使用单个插值将整个数组转储到 SQL 中:

$myData3="Insert Into EmployeeTimesheets  Values('$SqlArr', getDate())"; 

如果您要查看 $myData3 的值,它将是:

Insert Into EmployeeTimesheets Values('Array', getDate())

我看到 $SqlArr 也是二维的,第一个维度只是对您实际想要使用的数据的引用。因此,在执行其他操作之前,您可能需要执行以下操作:

$SqlArr = $SqlArr[0];

然后,您不需要尝试插入整个数组,而是需要引用各个数组项,如下所示:

$myData3="Insert Into EmployeeTimesheets  "
    + "Values('$SqlArr[EmpId]', '$SqlArr[WeekEnding]', getDate())"; 

我只在示例中包含了其中两项,但您将包含所有项目。

您还应该枚举 INSERT 语句中的列,以避免将来出现问题。像这样:

$myData3="Insert Into EmployeeTimesheets (EmpId, WkEnd) "
    + "Values('$SqlArr[EmpId]', '$SqlArr[WeekEnding]', getDate())"; 

最后,您确实不应该将值直接放入 SQL 中,而应该使用参数化查询。我通常使用 PDO 进行数据库访问,插入的参数化实现如下所示:

$sql = "Insert Into EmployeeTimesheets (EmpId, WkEnd) Values(?, ?, getDate())"; 
$conn = new PDO("connection string goes here");
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $SqlArr['EmpId']);
$stmt->bindParam(2, $SqlArr['WeekEnding']);
$stmt->execute();

如果您愿意,还可以使用命名参数。请参阅PDO documentation .

关于javascript - 使用 AJAX 和 PHP 将数据数组插入 SQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619479/

相关文章:

javascript - Owl Carousel - 自动高度移动问题

JavaScript 两个不同日期的相等日期

php - 使用 preg_match 匹配同一字符的多次出现

c++ - 为什么当 int array[n] 无效时 new int[n] 有效?

javascript - 如何在 Backbone.js 路由中匹配它?

javascript - 发送 keyup 事件时如何避免竞争条件

php - 如何在触发器中将值从一个查询传递到另一个查询

php - 为什么不应该在 sql 字段名称中包含逗号?

java - 如何迭代对象列表,传递给方法然后将返回值存储在数组列表中?

javascript - 创建备份阵列