使用 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'];
我正在使用 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'];