gpt4 book ai didi

php - 使用 php 批量加载到 azure

转载 作者:行者123 更新时间:2023-12-02 06:58:49 24 4
gpt4 key购买 nike

我正在尝试使用 PHP 将 CSV 加载到 Azure Web 服务器数据库。每个 CSV 有 2000 行。我可以正常工作,但是当我在网页上运行该文件时,数据库仅更新了 479 个条目,我不知道为什么。网页需要很长时间才能处理,然后会显示页面已完成。这是我的插入语句。

try {
$connection = new PDO("sqlsrv:server = tcp:".$SrvName.",1433; Database = ".$DBName, $SQL_USER, $SQL_PASS);
if (($handle = fopen("personal.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$sql = "INSERT INTO personal (clientId, lastname, ssn)
VALUES ($data[0], $data[1],$data[2])";
$statement = $connection->prepare($sql);
$statement->execute();
}
fclose($handle);
}

} catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
}

非常感谢任何帮助!

最佳答案

我认为我们有两个解决方案:

解决方案1
How to: Send Data as a Stream :Microsoft Drivers for PHP for SQL Server 利用 PHP 流将大型对象发送到服务器。

解决方案2
设计一个存储过程,将文件名作为参数传递。
示例代码:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[spBulkInsert] @FileName varchar(255)
AS
declare @sql varchar(max)
BEGIN Try
set @sql =
'INSERT into ext.customer_Staging with (TABLOCK) (customer, age, gender)
SELECT * FROM OPENROWSET(
BULK '+ @FileName + ',
DATA_SOURCE = ''MyDataSource'',
FORMAT = ''CSV'',
FORMATFILE_DATA_SOURCE = ''MyDataSource''
) AS DataFile;
go'

exec(@sql)
END TRY

BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH

GO

然后使用php调用这个sqlserver存储过程实例。

<小时/>

但不要直接批量插入到您的真实表中。

  • 我总是会从 CSV 文件插入临时表 ext.customer_Staging(不带 IDENTITY 列)
  • 可能编辑/清理/操作您导入的数据
  • 然后使用如下 T-SQL 语句将数据复制到真实表:
INSERT into  ext.customer_Staging with (TABLOCK) (customer, age, gender)
SELECT * FROM OPENROWSET(
BULK 'bs140513_032310-demo.csv',
DATA_SOURCE = 'MyDataSource',
FORMAT = 'CSV',
FORMATFILE_DATA_SOURCE = 'MyDataSource'
) AS DataFile;
go

INSERT INTO ext.customer(Name, Address)
SELECT customer, age, gender
FROM ext.customer_Staging

关于php - 使用 php 批量加载到 azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66963016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com