Extbase TYPO3 7.6中的准备好的语句不起作用

问题描述 投票:0回答:2

我想将查询作为准备好的语句提交,如下所示。

$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList[] = '[email protected]';
$sql = 'SELECT uid FROM table_name WHERE email = ?';
$query->statement($sql, $sqlParamList);
$result = $query->execute();

但是我总是会收到如下错误。

您的SQL语法有误;检查手册对应于您的MariaDB服务器版本,以在'?'附近使用正确的语法在第1行'

我错了?

php typo3 prepared-statement extbase typo3-7.6.x
2个回答
5
投票

您需要首先将$sql解析为准备好的语句:

$preparedSql = $this->objectManager->get(\TYPO3\CMS\Core\Database\PreparedStatement::class, $sql, 'table_name');

使用$this->objectManager->get(),可使用参数PreparedStatement$sql实例化类'table_name'

这将更改您的$ sql并解析?以用作准备好的语句。


0
投票

另一种方法:

$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList = [
    ':email' => '[email protected]'
];
$sql = 'SELECT uid FROM table_name WHERE email = :email';
$query->statement($sql, $sqlParamList);
$result = $query->execute();

无法测试,只是一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.