使用 PDO SQL INSERT INTO 的 PHPunit 测试函数未定义数组键错误
Posted
技术标签:
【中文标题】使用 PDO SQL INSERT INTO 的 PHPunit 测试函数未定义数组键错误【英文标题】:Undefined array key error with PHPunit test function using PDO SQL INSERT INTO 【发布时间】:2021-08-29 02:35:17 【问题描述】:我正在使用 phpstorm。
我的测试类中已经有一个工作测试,我正在尝试让这个新功能测试工作。它测试一个简单的 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,错误指向的类函数在
$query ->bindValue(':id', $valueData[0], PDO::PARAM_INT);
在下面一行的测试函数上:
$ipStmt->setTimestampCount($validData,$mysqli);
谁能帮忙?
谢谢
【问题讨论】:
只是一个想法 - 更改您的主代码以执行类似测试代码的操作可能会更好,然后您将拥有$query ->bindValue(':id', $valueData['id']
,这更清晰(恕我直言)。
mysqli, PDO - 你为什么同时使用?
【参考方案1】:
在您的测试用例中 - $validData
只有 id 和 ip 元素 - 没有 0 元素。
看起来应该是
$validData = ['99','127.0.0.1'];
【讨论】:
是的,解决了它,我以前的方式有什么意义?我从堆栈中找到了这个例子,再次感谢 实际上错误我现在得到 $query->execute();行是:“完整性约束违规:1452 无法添加或更新子行:外键约束失败”这是我需要第一种方法的原因吗? 查看表定义,看看定义了哪些外键。这意味着(也许)您需要在另一个表中使用该 IP 地址记录才能使其工作。 @spinstaUSA:请参考堆栈中的示例,再次感谢。以上是关于使用 PDO SQL INSERT INTO 的 PHPunit 测试函数未定义数组键错误的主要内容,如果未能解决你的问题,请参考以下文章
sql [INSERT INTO] #Syntax #Insert_into
SQL——INSERTSELECTUPDATEDELETE和INSERT INTO
SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中