gpt4 book ai didi

php - 切换到 mysqli 后 LOCAL INFILE 的问题

转载 作者:可可西里 更新时间:2023-11-01 08:32:30 25 4
gpt4 key购买 nike

任何知道在 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

查询甚至在执行时返回 true!但是我的表中仍然没有加载任何数据。

$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条记录,所以这是正确的。

最佳答案

Google 快速搜索显示了以下 PHP 错误条目:https://bugs.php.net/bug.php?id=55737 .

这个问题似乎围绕着 php.ini 设置 open_basedir: http://www.php.net/manual/en/ini.core.php#ini.open-basedir

The LOAD DATA LOCAL INFILE function does not work with mysql5.5 and php5.4.4 on Debian Wheezy with open_basedir restrictions in place. It works perfectly fine when open_basedir is disabled or set to nothing.

编辑(供引用的解决方案):OP 的问题在于“SET AUTOCOMMIT = 0”初始化命令。它正在加载和处理,但未提交给数据库。

关于php - 切换到 mysqli 后 LOCAL INFILE 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com