我有大量的数据是由PHP脚本生成的,需要插入到数据库中。我尝试了各种解决方案,但结果不尽相同,但目前的解决方案(我认为应该是最好的)是我将数据生成到CSV文件中,然后使用以下查询将其插入到数据库中:
LOAD DATA LOCAL INFILE 'myfile.csv' INTO TABLE t1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'"
我使用CodeIgniter作为PHP框架,在执行查询后,我被重定向到一个错误页面,该页面只显示
发生数据库错误
错误编号:0
没有错误信息或任何东西。
我已经逐步完成了代码,但我所能找到的是mysqli_query()
返回false,稍后mysqli_errno()
返回0,mysqli_error()
返回空字符串。
然而,查询实际上已经成功,当我查看数据库时,我可以看到CSV文件中的所有数据都已经成功插入。这种行为是预期的吗?如果是,我想我必须稍微修改一下CodeIgniter代码,或者直接调用mysqli_query()
,而不是通过框架。
我还在MySQL Workbench中运行了完全相同的查询,但没有收到错误消息。
3条答案
按热度按时间a2mppw5e1#
我有完全相同的问题,当我意识到我没有连接到数据库。
我调用了
require_once('connect.php')
,但这是我第二次在代码中使用require_once
,因此PHP没有拉入连接。将
require_once
更改为require为我修复了此问题。iezvtpos2#
我以前从来没有试过php中的
LOAD INFILE
,但是一个快速的google想出了mysqli_set_local_infile_handler()函数,也许例子/评论可能会有帮助?编辑:我的理论是查询期望返回一些行的值,而连接没有返回任何数字。因此,当查询在MySQL端成功时,PHP期望一个大于0的数字,但没有得到它。因此,它报告失败,没有错误消息。
infile_handler将返回插入的行数。
x7yiwoj43#
在某些情况下,错误(0)可能只是误导。例如,在mysqli更新期间返回时,它可能只是表示***更改已完成,但与最后的记录相比,实际上没有任何更改***。这可能是您面临的问题。mysqli更新的示例如下所示:
我希望这对一个相关的问题有帮助,可能不是这个特定的问题。