【问题标题】:Codeigniter insert data results in PHP warningCodeigniter 插入数据导致 PHP 警告
【发布时间】:2014-03-03 16:02:26
【问题描述】:

我的 Codeigniter 应用程序在工作时出现问题。 我正在使用虚拟 Windows Server 2008 R2、IIS、MSSQL 和 PHP

当我尝试在数据库中插入新记录时,我收到以下警告(每次插入):

遇到了 PHP 错误

严重性:警告

消息:array_shift() 期望参数 1 为数组,给定 null

文件名:sqlsrv/sqlsrv_driver.php

行号:423

我正在使用的代码:

$data = array(
                'DataTypeSpecification'         => $dataTypeSpecID,
                'DocumentCode'                  => $docCode,
                'Title'                         => $title,
                'ProjectCode'                   => $projectCode, 
                'Process'                       => $process, 
                'Author'                        => $author,
                'Status'                        => $status,
                'Version'                       => $version, 
                'DateApproval'                  => $dateApproval,
                'Medium'                        => $medium, 
                'PaperArchivedDate'             => $paperArchivedDate, 
                'DMSArchivedDate'               => $DMSArchivedDate,
                'EDocDocument'                  => $eDocDocument,
                'Wildcard'                      => $wildcard, 
                'SequentialNumber'              => $seqNumber, 
                'Location'                      => $location, 
                'ArchivedShelf'                 => $archivedShelf,
                'Container'                     => $container, 
                'Remarks'                       => $remakrs, 
                'APDProjectStatus'              => $APDProjectStatus, 
                'SelectedForIND'                => $selectedForIND);

$result = $this->db->insert('dbo.ProjectRecords', $data);
return $result;

所有变量都设置正确。 这是有趣的事情。似乎所有内容都正确插入到数据库中...

有人知道为什么会显示这个警告吗?

问候 尼古拉

【问题讨论】:

  • 在代码的任何地方都看不到array_shift() ..
  • uumm 因为使用了 array_shift 函数。但它并没有被传递一个值......如果没有看到它,我们将无法知道它在做什么。但该警告并没有做任何“坏事”。它只是没有做任何事情。
  • 你能搜索一下并找到array_shift并发布它所在函数的代码吗...
  • 包含array_shift()的代码来自CI的sqlsrv驱动。具体来自_error_number() 函数。在发布代码之后,您还对$result 进行其他操作吗?
  • Samutz 好电话,抱歉今天早上咖啡没喝完。

标签: php database codeigniter warnings


【解决方案1】:

所以,我不得不编辑驱动程序本身。 我更改了文件system/database/sqlsrv/sqlsrv_driver.php _error_message()(第 407 行)和_error_number()(第 423 行)这两个函数

在这两行中,我将前两行更改为:

$tmp = sqlsrv_errors();
if($tmp == null) return null;
$error = array_shift($tmp);

因此,即_error_number() 变为:

function _error_number()
{
    $tmp = sqlsrv_errors();
    if($tmp == null) return null;
    $error = array_shift($tmp);
    return isset($error['SQLSTATE']) ? $error['SQLSTATE'] : null;
}

由于sqlsrv_errors() 返回NULL,因此发生错误,并且当将NULL 传递给array_shift() 方法时,发生了baaad 事情!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多