gpt4 book ai didi

PHP CSV 到 Mysql 脚本 - 处理特殊字符

转载 作者:行者123 更新时间:2023-11-30 00:12:05 24 4
gpt4 key购买 nike

我有以下脚本,可将数据从 CSV 文件上传到我的数据库。

当 CSV 中的某个字段包含撇号 (') 时,就会出现问题

来自 CSV 的示例数据:

"12345","John","Smith","john.smith@gmail.com","Company Name"
"12346","Joe","Blogg","joe.blogg@gmail.com","Company's Name"

我正在使用的代码:

<?
$link = mysql_connect("localhost", "######", "######") or die("Could not connect: ".mysql_error());
$db = mysql_select_db("######") or die(mysql_error());

$row = 1;
$handle = fopen ("file.csv","r");

while ($data = fgetcsv ($handle, 1000, ",")) {
$query = "INSERT INTO suppliers(`regid`, `firstname`, `lastname`, `email`, `company`) VALUES('".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."') ON DUPLICATE KEY UPDATE REGID='".$data[0]."', firstname='".$data[1]."', lastname='".$data[2]."', email= '".$data[3]."', company= '".$data[4]."'";
$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
$row++;
}
fclose ($handle);
?>

有人可以提出解决方案来解决这个问题吗?

非常感谢

最佳答案

最好的解决方案是升级到 PDO 或 mysqli,并利用它们的参数化查询。

如果不能,您应该在将数据插入查询之前转义数据:

while ($data = fgetcsv($handle, 1000, ",")) {
$data = array_map('mysql_real_escape_string', $data);
$query = "INSERT INTO suppliers(`regid`, `firstname`, `lastname`, `email`, `company`) VALUES('".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."') ON DUPLICATE KEY UPDATE REGID='".$data[0]."', firstname='".$data[1]."', lastname='".$data[2]."', email= '".$data[3]."', company= '".$data[4]."'";
$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
$row++;
}

您应该始终对任何用户提供的数据使用mysql_real_escape_string,以防止 SQL 注入(inject)或处理此类语法问题。

关于PHP CSV 到 Mysql 脚本 - 处理特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23965125/

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