使用 PDO SQL INSERT INTO 的 PHPunit 测试函数出现未定义的数组键错误

Undefined array key error with PHPunit test function using PDO SQL INSERT INTO

我正在使用 phpstorm。

我的测试中已经有一个工作测试 class,我正在尝试让这个新功能测试工作。它测试了一个简单的 INSERT INTO SQL 语句,我拥有数组中要使用的所有数据,我使用 PDO 并创建了所有细节的模拟。

我有正在测试的实际功能。所以这没有任何问题。

我已经包含了下面的代码:

public function testSetTimestampCount()
    {
        $mysqli = (new db_connection())->connection();

        $validData = [
            'id' => '99',
            'ip' => '127.0.0.1'
        ];



        $table = 'ip';

        $stmt = $this->createMock(\PDOStatement::class);
        $stmt->expects($this->once())
            ->method('execute')
            ->will(returnValueMap($validData))
            ->with($validData)
            ->willReturn(true);


        global $pdo;
        $pdo = $this->createMock('PDO');
        $pdo->expects($this->once())
            ->method('prepare')
            ->with("INSERT INTO {$table} id,address VALUES (:ip, :id)")
            ->willReturn($stmt);

        $ipStmt = new ip_request();
        $ipStmt->setTimestampCount($validData,$mysqli);

    }

我的实际函数是这样的:

function setTimestampCount($valueData,$mysqli)
    {
 
        $query = $mysqli->prepare ("INSERT INTO `ip` (`id`, `address`)VALUES (:id,:ip)");
        $query ->bindValue(':id', $valueData[0], PDO::PARAM_INT);
        $query ->bindValue(':ip', $valueData[1], PDO::PARAM_STR);
        echo $valueData[0];
        $query->execute();

    }

从主代码调用这个函数如下:

$valueData = [];
array_push($valueData, $id);
array_push($valueData, $ip);
                    
(new ip_request)->setTimestampCount($valueData,$mysqli);

我遇到的错误是未定义数组键 0,错误指向 class 函数

$query ->bindValue(':id', $valueData[0], PDO::PARAM_INT);

并在以下行的测试函数上:

$ipStmt->setTimestampCount($validData,$mysqli);

有人能帮忙吗?

谢谢

在您的测试用例中 - $validData 只有 id 和 ip 元素 - 没有 0 元素。

看起来应该是

$validData = ['99','127.0.0.1'];