Php 验证CSV上的标题&;文本

Php 验证CSV上的标题&;文本,php,mysql,validation,Php,Mysql,Validation,我有一个基本的导入工具,我们使用PHP将其上传到数据库中。 下面是一个示例脚本。 我的问题是如何在导入之前验证标题?基本上,检查一个值以确保正确的文件被导入。我在网上到处找,但似乎找不到答案 我的标题是 SKU,价格,有效 将数据低优先级本地填充“$file”加载到表sample您的临时表中以“”结尾的字段中 可选地由“\”行包围,以“\n”终止忽略1行 //继续运行脚本的其余部分 我的问题是如何在运行脚本之前验证头? 我正在使用 $file=$\u获取['file']; $file=urlde

我有一个基本的导入工具,我们使用PHP将其上传到数据库中。 下面是一个示例脚本。 我的问题是如何在导入之前验证标题?基本上,检查一个值以确保正确的文件被导入。我在网上到处找,但似乎找不到答案 我的标题是

SKU,价格,有效

将数据低优先级本地填充“$file”加载到表
sample
您的临时表中
以“”结尾的字段中 可选地由“\”行包围,以“\n”终止忽略1行 //继续运行脚本的其余部分

我的问题是如何在运行脚本之前验证头? 我正在使用

$file=$\u获取['file']; $file=urldecode($file);//上传时获取文件


我认为您需要阅读
$文件的第一行
,并将其与一组标题列表进行比较:

$requiredHeaders = array('SKU', 'Price', 'Active'); //headers we expect

$f = fopen($file, 'r');
$firstLine = fgets($f); //get first line of csv file
fclose($f); // close file    

$foundHeaders = str_getcsv(trim($firstLine), ',', '"'); //parse to array

if ($foundHeaders !== $requiredHeaders) {
   echo 'Headers do not match: '.implode(', ', $foundHeaders);
   die();
}

//run import script…

$\u GET
值直接传递到您的查询中是一个问题。请绝对确定这一点。我理解。您建议什么是更好的解决方案?转义是更好的解决方案。甚至更好:使用像PDO这样支持绑定到占位符的数据库层。感谢您的快速响应。我对$f=fopen没有把握($file,'r');剩下的我可以试试,我会让你知道的。值得注意的是,通过更多的编码,你可以使
INSERT
语句适应出现的标题。就像在标题
X
和列
X
之间有一个映射表一样,你可以确定出现了哪些标题,确定要插入哪些列这样,如果列丢失或重新排序,您的
INSERT
仍然可以工作。在这种情况下,我不是直接插入,而是使用一个临时表,而不是执行更新语句,因为它实际上一次将进入多个表。我有一个文件,它实际上是一个Amazon文件,其标题是向下四行。读取该行的最佳方式是什么?使用长度