Breaking: #102875 - Changed Connection method signatures and behaviour
See forge#102875
Description
Signature and behaviour of following methods has been changed:
last
no longer accepts the sequence and field name.Insert Id () quote
no longer has a type argument and the value must be a string.()
Public Connection::
class constants has been replaced with the
Doctrine DBAL 4 Parameter
and Array
enum definitions.
Note
Doctrine DBAL dropped the support for using the \PDO::
constants in
favour of the enum types on several methods. Be aware of this and use the
\TYPO3\
constants to reduce
required work on upgrading.
Impact
Calling quote
with a non-string as first argument will result in a
PHP error. Still providing the second argument will not emit an error, but
may be detected by static code analysers.
Calling last
not directly after the record insert or inserting
records in another table in between will return the incorrect value.
Affected installations
Only installations calling quote
with a non-string as first argument
or not using last
directly after the record insert.
Migration
lastInsertId()
Returns the last inserted ID (auto-created) on the connection.
Note
That means, that the last inserted id
needs to be retrieved directly before
inserting a record to another table. That should be the usual workflow used
in the wild - but be aware of this.
BEFORE
use TYPO3\CMS\Core\Database\Connection as Typo3Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/** @var Typo3Connection $connection */
$connection = GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable('tx_myextension_mytable');
$connection->insert(
'tx_myextension_mytable',
[
'pid' => $pid,
'some_string' => $someString,
],
[
Typo3Connection::PARAM_INT,
Typo3Connection::PARAM_STR,
]
);
$uid = $connection->lastInsertId('tx_myextension_mytable');
AFTER
use TYPO3\CMS\Core\Database\Connection as Typo3Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/** @var Typo3Connection $connection */
$connection = GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable('tx_myextension_mytable');
$connection->insert(
'tx_myextension_mytable',
[
'pid' => $pid,
'some_string' => $someString,
],
[
Typo3Connection::PARAM_INT,
Typo3Connection::PARAM_STR,
]
);
$uid = $connection->lastInsertId();