Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Extbase TYPO3 7.6中准备的语句不起作用_Php_Typo3_Prepared Statement_Extbase_Typo3 7.6.x - Fatal编程技术网

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变量后,得到空结果。