环境:Docker容器,PHP和MySQL在单独的容器中运行
我有一个表格“ persons”,并希望使用TableGateway插入值。代码被执行,我可以捕获最后插入的值。这是一个自动递增,此表上执行的每个插入都会递增该值。
但是表中没有保存任何值(例如电话)
public function __construct(
...
TableGateway $tablePersons,
...
) {
...
$this->tablePersons = $tablePersons;
...
}
...
$this->tablePersons->insert(['phone' => 123456]);
$id = $this->tablePersons->lastInsertValue;
我打印出了sql字符串,看起来不错。
$sql = $this->tablePersons->getSql();
$insert = $sql->insert();
$insert->values(['phone' => 123456]);
print $sql->buildSqlString($insert);
// Result: INSERT INTO `persons` (`phone`) VALUES ('123456')
我在phpmyadmin上执行了此查询,一切看起来都很好,存储了值。
mysql_error.log为空 mysql.log显示以下内容:
2019-05-12T23:34:20.940510Z 34 Connect root@172.20.0.5 on app using TCP/IP
2019-05-12T23:34:20.940795Z 34 Query SET AUTOCOMMIT=0
2019-05-12T23:34:20.943878Z 34 Query INSERT INTO `persons` (`phone`) VALUES (42)
2019-05-12T23:34:20.944329Z 34 Quit
要绕过zend-framework,我转到index.php并执行了经典的mysqli查询:
$conn = new mysqli(## same values as in the zend-db adapter config ##);
$sql = "INSERT INTO persons (phone) VALUES (123456)";
$conn->query($sql);
这工作得很好-存储了新行。因此,我认为可以排除环境问题。
我需要一个提示,一个想法,为什么在使用框架函数运行查询时为什么不保存值。
答案 0 :(得分:1)
尝试确认您已启动数据库事务,从而阻止了AUTO_COMMIT插入的值。另外,请确认电话和其他字段的字段长度足够大以存储传递的值。