gpt4 book ai didi

php - 使用 PHP PDO 从 CSV 插入来自 mysql 的数据

转载 作者:行者123 更新时间:2023-11-30 21:38:12 26 4
gpt4 key购买 nike

我有 CSV 格式的数据列表,需要将这些数据插入 MySQL 数据库。这些数据应该安全地插入,即卫生。所以,我使用PDO对象来纠正SQL注入(inject)。但是,它无法从 CSV 文件中获取数据并插入空值。

这是例子,

<?php
$servername = "localhost";
$username = "root";
$password = "";

try {
$conn = new PDO("mysql:host=$servername;dbname=contact_list",$username,$password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connection successfully";
}
catch(PDOException $e)
{
echo "connection Failed:" . $e -> getMessage();
}

// Create CSV to Array function
function csvToArray($filename = '', $delimiter = ',')
{
if (!file_exists($filename) || !is_readable($filename)) {
return false;
}

$header = NULL;
$result = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
if (!$header)
$header = $row;
else
$result[] = array_combine($header, $row);

}
fclose($handle);
}

return $result;
}

// Insert data into database

$all_data = csvToArray('contact.csv');
foreach ($all_data as $data) {

$data = array_map(function($row){
return filter_var($row, FILTER_SANITIZE_STRING, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
}, $data);

$sql = $conn->prepare("INSERT INTO contact
(title, first_name,last_name,company_name,date_of_birth,notes)
VALUES (:t, :fname, :lname,:cname,:dob,:note)");

$sql->bindParam(':t', $data[1], PDO::PARAM_STR);
$sql->bindParam(':fname', $data[2], PDO::PARAM_STR);
$sql->bindParam(':lname', $data[3], PDO::PARAM_STR);
$sql->bindParam(':cname', $data[0], PDO::PARAM_STR);
$sql->bindParam(':dob', $data[4], PDO::PARAM_STR);
$sql->bindParam(':note', $data[15], PDO::PARAM_STR);
print_r($data);
$sql->execute();
}
?>

谁能帮我解决这个问题?

最佳答案

如果您查看array_combine() 的文档,您会发现其目的是构建关联数组。您在 csvToArray() 中使用此函数,但稍后在您的代码中您尝试使用数字键获取数据。我没想到你会插入任何东西。

附带说明,您通过一遍又一遍地重复准备相同的语句,完全违背了准备语句的目的。准备一次,执行多次。很少需要单独绑定(bind)参数,在几乎所有情况下,您都可以将数据作为数组提供给 PDOStatement::execute()。将 HTML 实体存储在数据库中也是一种不好的形式;如果您需要输出为 HTML,则此时执行转义。

像这样的东西应该可以工作(根据需要调整数组键名。)

$all_data = csvToArray('contact.csv');
$sql = $conn->prepare("INSERT INTO contact
(title, first_name, last_name, company_name, date_of_birth, notes)
VALUES (:t, :fname, :lname,:cname,:dob,:note)");
foreach ($all_data as $data) {
$params = [
":t" => $data["t"],
":fname" => $data["fname"],
":lname" => $data["lname"],
":dob" => $data["dob"],
":note" => $data["note"],
];
$sql->execute($params);
}

关于php - 使用 PHP PDO 从 CSV 插入来自 mysql 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52953500/

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