【发布时间】:2014-05-02 14:09:29
【问题描述】:
任何知道在 PHP 中使用 LOCAL INFILE 的问题的人都会理解我对此感到沮丧。
我之前通过在我的连接调用中使用 128 标志使 LOCAL INFILE 在我的所有 PHP 脚本中正常工作。
mysql_connect(DB_SERVER,DB_USER,DB_PASS,false,128)
我现在正在尝试切换到 mysqli,因为旧的 mysql 已经贬值了。 我已经尝试了在每个论坛上可以找到的所有内容,但没有运气。
我在 mysqli 中的连接调用似乎很好:
$connection = mysqli_init();
if (!$connection) {die('mysqli_init failed');}
if (!mysqli_options($connection, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {die('Setting MYSQLI_INIT_COMMAND failed');}
if (!mysqli_options($connection, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');}
if (!mysqli_options($connection, MYSQLI_OPT_LOCAL_INFILE,true)) {die('Setting MYSQLI_OPT_LOCAL_INFILE failed');}
if (!mysqli_real_connect($connection, DB_SERVER, DB_USER, DB_PASS, DB_SELECT)) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
我的 my.cnf 文件包含适当的参数:
[mysql]
local-infile=1
[mysqld]
local-infile=1
我的 php.ini 也包含相应的参数:
[MySQLi]
mysqli.allow_local_infile = On
[MySQL]
mysql.allow_local_infile = On
查询甚至在执行时返回真!但是我的表中仍然没有加载任何数据。
$query = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table} FIELDS TERMINATED BY '{$fieldTerm}' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '{$lineTerm}' IGNORE {$skipLines} LINES";
if(mysqli_query($connection,$query)) {$message .= "Load Complete <br />";} //Message returns with "Load Complete".
除了调用 system() 之外,我不知道该怎么做才能完成这项工作。它适用于 mysql,只是现在不适用于 mysqli。
为什么 LOCAL INFILE 这么难?这个问题已经存在太久了。
编辑:
奇怪,当我在查询后运行 mysqli_info() 时,它说它执行正确。
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
测试文件中有4条记录,所以这是正确的。
【问题讨论】:
-
嘿,我进行了一些编辑,以使您的帖子更符合网站的意图,并帮助它获得更好的曝光(特别是标题,并没有它具体可能)。祝你好运,希望你得到一个有用的答案!