Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在执行加载数据本地填充之前验证数据_Php_Mysql_Pdo - Fatal编程技术网

Php 在执行加载数据本地填充之前验证数据

Php 在执行加载数据本地填充之前验证数据,php,mysql,pdo,Php,Mysql,Pdo,我正在编写一个简单的导入脚本,它处理一个.txt文件,然后通过LOAD DATA LOCAL infle将内容上传到我的数据库 查询是通过PHP/PDO完成的 $status = $pdo->exec( "LOAD DATA LOCAL INFILE '" . $file . "' IGNORE INTO TABLE `polizas` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

我正在编写一个简单的导入脚本,它处理一个.txt文件,然后通过
LOAD DATA LOCAL infle
将内容上传到我的数据库

查询是通过
PHP/PDO
完成的

 $status = $pdo->exec(
  "LOAD DATA LOCAL INFILE '" . $file . "'
      IGNORE
      INTO TABLE `polizas`
      FIELDS TERMINATED BY ';'
      LINES TERMINATED BY '\n'
      IGNORE 1 LINES
      (`seccion`, `propuesta`, `poliza`, `endoso`, `tipo_endoso`, `desc_tipo_endoso`, `pol_que_renueva`, `iva_cond`, `tipo_doc`, `nro_doc`, `apellido`, `domicilio`, `cod_postal`, `telefono`, `localidad`, `provincia`, `fecha_emision`, `fecha_inicio`, `fecha_vcto`, `canal_pago`, `desc_canal_pago`, `origen`, `productor`, `organizador`, `moneda`, `item`, `marca`, `modelo`, `cero_Km`, `motor`, `chasis`, `patente`, `tipo_carroceria`, `desc_tipo_carroceria`, `cobertura`, `desc_cobertura`, `cod_acc1`, `desc_acc1`, `valor_acc1`, `cod_acc2`, `desc_acc2`, `valor_acc2`, `cod_acc3`, `desc_acc3`, `valor_acc3`, `cod_acc4`, `desc_acc4`, `valor_acc4`, `suma_aseg`, `prima`, `recarg`, `der_emision`, `sellos`, `imp_tasas`, `otros`, `bonif`, `iva`, `adminis_financ`, `premio`, `cant_cuotas`, `ajuste`, `tipo_vehiculo`, `desc_tipo_vehiculo`, `codigo_uso`, `descripcion_uso`, `ano_fab`, `nro_prestamo`, `vcto_cuota1`, `vcto_prestamo`, `tipo_prestamo`, `tipo_operacion`, `seccion_pol_paquete`, `poliza_pol_paquete`)"
 );
上述代码有效。问题是用户可以上传任何东西(图像、pdf、exe等),而且脚本通常会成功地将所有垃圾数据插入我的数据库

我已经限制了服务器端用户可以提交的文件类型,但是可以通过将文件重命名为.txt并再次提交来轻松绕过


我正在寻找一种有效的方法来检查用户试图提交的数据是否与我的数据库期望接收的数据相符。

我认为最好的解决方案是在将文件发送到mysql之前读取文件的第一行。并检查这一行的内容是否符合您的期望

$fn = fopen("myfile.txt","r");
$result = fgets($fn);
if ($result == "seccion,propuesta,..."){
//Proces file
}
fclose($fn);

始终尝试使用诸如
:file
之类的占位符,而不是
““$file”。
,因为占位符将始终正确地转义。在插入之前,您必须使用PHP扫描内容。MySQL不知道EXE是什么,但是,作为一个例子,如果您使用的是Linux类型的系统,
file
命令就可以了。很好,我错过了占位符位,谢谢。至于我所说的EXE和其他东西,我指的是任何类型的文件,从图像到PDF,甚至是用户提交的可执行文件(.EXE),除非我在脚本中检查文件扩展名,否则都会成功插入。这一部分已经处理好了,但不是用户只需将其重命名为.txt即可提交任何内容的部分。扩展没有意义。至少,您要做的是使用工具(如if not test)扫描“magic bytes”,以确保文件具有某种符合预期的头文本。