Tablegateway“插入”被执行,但没有值写入表

时间:2019-05-12 23:42:41

标签: zend-db

环境: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);

这工作得很好-存储了新行。因此,我认为可以排除环境问题。

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

1 个答案:

答案 0 :(得分:1)

尝试确认您已启动数据库事务,从而阻止了AUTO_COMMIT插入的值。另外,请确认电话和其他字段的字段长度足够大以存储传递的值。