Tablegateway "вставка" выполняется, но никакие значения не записываются в таблицу - PullRequest
0 голосов
/ 13 мая 2019

Среда: Docker-контейнер, в котором PHP и MySQL работают в отдельных контейнерах

У меня есть таблица "people" и я хочу вставить значения с помощью 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 Ответ

1 голос
/ 13 мая 2019

Попытайтесь подтвердить, что вы инициировали транзакцию базы данных, которая запрещает AUTO_COMMIT вставленных значений.Также убедитесь, что длина поля для телефона и других полей достаточно велика для хранения переданных значений.

...