Tablegateway "insert" 被执行但没有值被写入 table

Tablegateway "insert" gets executed but no values are written into table

环境:Docker 容器,其中 PHP 和 MySQL 运行 在单独的容器中

我有一个 table "persons" 并且想使用 TableGateway 插入值。代码被执行,我可以捕获最后插入的值。这是一个自动增量,每次在此 table 上执行的插入都会增加此值。

但是 table 中没有保存任何值(例如 phone)

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);

这工作得很好 - 存储了一个新行。所以我认为,环境的问题可能会被排除。

我需要一个提示,一个想法,为什么当我 运行 使用框架函数查询时没有保存这些值。

尝试确认您启动了阻止 AUTO_COMMIT 插入值的数据库事务。此外,确认 phone 和其他字段的字段长度足以存储传递的值。