【问题标题】:Prepared statements in Extbase TYPO3 7.6 not workingExtbase TYPO3 7.6 中的准备好的语句不起作用
【发布时间】:2018-07-19 06:39:56
【问题描述】:

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

$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 行'

我哪里错了?

【问题讨论】:

    标签: php typo3 prepared-statement extbase typo3-7.6.x


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你能详细解释一下吗?
    • 我直接在答案中添加了一些解释。
    • 好的。但不明白在哪里可以使用 $preparedSql 变量。像这样:$uqery->statement($preparedSql, $sqlParamList);
    • $preparedSql 是一个新变量,它向您显示 $sql 现在已准备好用于准备好的语句。 :)
    • 在 statement() 中传递 $preparedSql 变量后得到空结果。
    【解决方案2】:

    另一种方法:

    $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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 2014-09-28
      • 2015-10-11
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多