我正在尝试使用 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 接收数组
最佳答案
您不能像在这一行中那样使用单个插值将整个数组转储到 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/