Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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_Csv - Fatal编程技术网

Php 错误捕获加载数据本地填充的最佳方法?

Php 错误捕获加载数据本地填充的最佳方法?,php,mysql,csv,Php,Mysql,Csv,我是一个MySQL新手,正在完成我的webapp的核心代码。该代码导入一个CSV文件(本地),该文件由FileMaker生成和清理,并保持原样 考虑到这将很快投入生产(可能是一个低于500mb的数据库),我想知道是否有更好的错误检查/捕获方法,可以防止出现问题,或者提醒我的服务器设置。我读过关于临时日志等的文章,我的MySQL管理还没有达到标准 最基本的代码是: $m = mysql_connect('localhost', 'mytable', 'mypassword'); $db = 'my

我是一个MySQL新手,正在完成我的webapp的核心代码。该代码导入一个CSV文件(本地),该文件由FileMaker生成和清理,并保持原样

考虑到这将很快投入生产(可能是一个低于500mb的数据库),我想知道是否有更好的错误检查/捕获方法,可以防止出现问题,或者提醒我的服务器设置。我读过关于临时日志等的文章,我的MySQL管理还没有达到标准

最基本的代码是:

$m = mysql_connect('localhost', 'mytable', 'mypassword');
$db = 'mydb';
mysql_select_db($db) or die("Import Error - Couldn't select database: " . mysql_error());

$sql = 'load data local infile "inventory.csv"
        into table ibl_account_details_temp fields terminated by ","
        optionally enclosed by "\""
        lines terminated by "\r"
        (store_id, SKU, account, item_number, brand, description, size, category, price, qty, fees)
        ';

echo mysql_query($sql) or die(myqsl_error());

PS EDIT:我也想知道这种导入方法是否对SQL注入开放?

不幸的是,加载数据填充的错误处理非常糟糕。我几乎每天都在使用它,导入到某种临时表中,并使用PHP和MySQL的组合来验证导入的内容,这已经成为一个简单的例行程序。有人可能会说这是额外的工作,但它确实有让我完全控制什么是“错误”的优势。简单地说,我使用它尽可能高效地获取原始数据,然后在php脚本中构建错误检查和验证规则。

感谢您的快速响应。我的错误检查是在FileMaker中进行的,它非常严格,所以我在那里感觉很安全。顺便说一句,这条路线有SQL注入的可能性吗?我不知道你的数据来自哪里,所以不能肯定,但这通常是用户输入的问题,所以可能不是。然后再回到你在FileMaker中对成品的安全性所做的清理。我看不出通过执行
加载数据填充
,一阶SQL注入会有什么风险,因为MySQL没有执行CSV文件的内容,它只是将其解析为CSV。当然,这并没有说明二阶攻击的风险,但只要每个接受输入(包括来自查询结果的输入)的查询都使用参数化,您就应该是安全的。出于这个原因(以及其他原因),您应该使用mysqli或PDO来访问mysql,而不是mysql_*函数。我无法解决这个问题,主机的最大内存为128mb,需要让它继续工作。也就是说,我使用PDO的每个其他地方;-)哦,当然,我不反对使用
LOAD DATA infle
导入CSV,这就是它的用途。