这是我遇到的一个非常奇怪的问题,我不明白是什么引起的
基本上,问题是我在PHP中有一个简单的上传函数,它上传CSV文件,然后将每一行导入MYSQL数据库。
现在,问题是,我有大约200+
行在我的CSV文件,但当我上传并导入它到MYSQL使用我的PHP页面,我只得到周围的158 of them imported
,我没有得到任何错误,所以我不明白是什么原因导致这。
我有另一个CSV文件,其中有大约300+ rows
,当我上传/导入这个CSV文件时,我得到周围的270 rows imported
到MYSQL。
这就像import函数总是很短的几行,我根本不明白它。
这是我的PHP导入代码:error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST['UP'])) {
include "config/connect.php";
$imp= $_FILES["csv"]["name"];
move_uploaded_file($_FILES["csv"]["tmp_name"],"imports/$imp");
// path where your CSV file is located
////////////////////////////////////////////////////////
define('CSV_PATH','');
// Name of your CSV file
$csv_file = CSV_PATH . "imports/".$imp."";
$i = 0;
set_time_limit(10000);
$fp = fopen("imports/".$imp."", "r");
while( !feof($fp) ) {
if( !$line = fgetcsv($fp, 1000, ',', '"')) {
continue;
}
$sql0 = "INSERT INTO `myTable`(`column1`) VALUES('".$line[0]."')";
$query0 = mysqli_query($db_conx, $sql0);
}
fclose($fp);
printf("<script>location.href='mypage.php'</script>");
exit();
}
使用直接导入MYSQL是没有问题的,由于安全问题/漏洞…
有人能就这个问题提出建议吗?
为了避免引用问题,您需要使用带有bind_param的预处理语句。
程序风格:$stmt = mysqli_prepare($db_conx, "INSERT INTO `myTable`(`column1`) VALUES(?)");
mysqli_stmt_bind_param($stmt, 's', $line[0] );
mysqli_stmt_execute($stmt);
面向对象风格:$stmt = $mysqli->prepare("INSERT INTO `myTable`(`column1`) VALUES(?)");
$stmt->bind_param('s', $line[0]);
$stmt->execute();
根据文档,s
用于字符串,i
用于整数,d
用于双精度/小数。