codeigniter mysqli_query返回false,错误代码为0,但查询成功

zfciruhq  于 2022-12-25  发布在  Mysql
关注(0)|答案(3)|浏览(147)

我有大量的数据是由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中运行了完全相同的查询,但没有收到错误消息。

a2mppw5e

a2mppw5e1#

我有完全相同的问题,当我意识到我没有连接到数据库。
我调用了require_once('connect.php'),但这是我第二次在代码中使用require_once,因此PHP没有拉入连接。
require_once更改为require为我修复了此问题。

iezvtpos

iezvtpos2#

我以前从来没有试过php中的LOAD INFILE,但是一个快速的google想出了mysqli_set_local_infile_handler()函数,也许例子/评论可能会有帮助?
编辑:我的理论是查询期望返回一些行的值,而连接没有返回任何数字。因此,当查询在MySQL端成功时,PHP期望一个大于0的数字,但没有得到它。因此,它报告失败,没有错误消息。
infile_handler将返回插入的行数。

x7yiwoj4

x7yiwoj43#

在某些情况下,错误(0)可能只是误导。例如,在mysqli更新期间返回时,它可能只是表示***更改已完成,但与最后的记录相比,实际上没有任何更改***。这可能是您面临的问题。mysqli更新的示例如下所示:

$xCount = 0;        //will monitor if changes were done
$updateFlag = false;
$xMsg = '';
$dbx = $this->dbx;
$dbx->select_db("dbname");
$query = "UPDATE xxx_table SET NAME = ?, GENDER = ? WHERE ORG_ID = ? AND EMPID = ?";
$statement = $dbx->prepare($query); 
$statement->bind_param('ssss', $flname, $gender, $orgId, $empId);
if($statement->execute()){
    $xCount = $statement -> affected_rows;  //real-check if changes occured
    if($xCount > 0){
        $updateFlag = true; 
        $xMsg = 'Employee Data Successfully Updated';
    }else {
        //if no changes occur, like same values, this will run
        //in this particular case, your may treat as fine 
        $updateFlag = true; 
        $xMsg = "Successful With No Major Changes";
    }       
} else {
    //this is simply your coding error;
    //die('Error : ('. $dbx->errno .') '. $dbx->error); 
    $updateFlag = false;
    $xMsg = 'Internal Error On Employee Logs';
}
$statement->close();

我希望这对一个相关的问题有帮助,可能不是这个特定的问题。

相关问题