Php Extbase TYPO3 7.6中准备的语句不起作用
我想将查询作为准备好的语句提交,如下所示Php Extbase TYPO3 7.6中准备的语句不起作用,php,typo3,prepared-statement,extbase,typo3-7.6.x,Php,Typo3,Prepared Statement,Extbase,Typo3 7.6.x,我想将查询作为准备好的语句提交,如下所示 $query = $this->createQuery(); $query->getQuerySettings()->usePreparedStatement(TRUE); $sqlParamList[] = 'test@gamil.com'; $sql = 'SELECT uid FROM table_name WHERE email = ?'; $query->statement($sql, $sqlParamList); $
$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList[] = 'test@gamil.com';
$sql = 'SELECT uid FROM table_name WHERE email = ?';
$query->statement($sql, $sqlParamList);
$result = $query->execute();
但我总是会遇到下面这样的错误
$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList[] = 'test@gamil.com';
$sql = 'SELECT uid FROM table_name WHERE email = ?';
$query->statement($sql, $sqlParamList);
$result = $query->execute();
您的SQL语法有错误;检查手册
对应于您的MariaDB服务器版本,以便在第1行的“?”附近使用正确的语法
我错在哪里?您需要首先将
$sql
解析为一条准备好的语句:
$preparedSql = $this->objectManager->get(\TYPO3\CMS\Core\Database\PreparedStatement::class, $sql, 'table_name');
使用$this->objectManager->get()
可以使用参数$sql
和'table\u name'
实例化类PreparedStatement
这将更改您的$sql并解析要用作准备语句的
?
。您需要首先将$sql
解析为准备语句:
$preparedSql = $this->objectManager->get(\TYPO3\CMS\Core\Database\PreparedStatement::class, $sql, 'table_name');
使用$this->objectManager->get()
可以使用参数$sql
和'table\u name'
实例化类PreparedStatement
这将更改您的$sql并解析要用作准备语句的?
。另一种方法:
$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList = [
':email' => 'test@gamil.com'
];
$sql = 'SELECT uid FROM table_name WHERE email = :email';
$query->statement($sql, $sqlParamList);
$result = $query->execute();
无法测试它,只是一种方法。另一种方法:
$query = $this->createQuery();
$query->getQuerySettings()->usePreparedStatement(TRUE);
$sqlParamList = [
':email' => 'test@gamil.com'
];
$sql = 'SELECT uid FROM table_name WHERE email = :email';
$query->statement($sql, $sqlParamList);
$result = $query->execute();
无法测试,只是一种方法。您能详细解释一下吗?我直接在答案中添加了一些解释。好的。但我不明白在哪里可以使用$preparedSql变量。如下所示:$uqery->statement($preparedSql,$sqlParamList)
$preparedSql
是一个新变量,用于显示$sql
现在已为prepared语句做好准备。:)在语句()中传递$preparedSql变量后得到空结果。您能详细解释一下吗?我直接在答案中添加了一些解释。好的。但我不明白在哪里可以使用$preparedSql变量。如下所示:$uqery->statement($preparedSql,$sqlParamList)$preparedSql
是一个新变量,用于显示$sql
现在已为prepared语句做好准备。:)在语句()中传递$preparedSql变量后,得到空结果。