1

我有一个使用函数的旧版应用程序mysqli_*()(实际上,它使用mysql_*()函数。哎呀!)。我使用aura/sqlquery作为 SQL 查询生成器。例如:

$queryFactory = new Aura\SqlQuery\QueryFactory('mysql');
$select = $queryFactory->newSelect();
$select->from('sometable AS t')
    ->where('t.field1 = 0')
    ->where("t.field2 <> ''");

然后我们通过转换为字符串来获取原始 SQL:

$sql = (string) $select;

现在我想在 a 中做一些变量绑定where()

$select->where('t.somefield = ?', $somevalue);

当我转换为字符串时,似乎永远不会发生转义/绑定。似乎只有在使用 PDO 和准备好的语句时才会发生绑定。

任何想法如何在aura/sqlquery使用mysqli连接时获得变量绑定?

4

2 回答 2

1

如果您的 PHP 版本 >= 5.6,这里有一个函数可以用来从 aura/sqlquery 对 mysqli 运行查询

function mysqli_query_params($mysqli, $query, $params, $types = NULL)
{
    $statement = $mysqli->prepare($select);
    $types = $types ?: str_repeat('s', count($params));
    $statement->bind_param($types, ...$params);
    $statement->execute();
    return $statement;
}

像这样使用

mysqli_query_params($mysqli, $select->getStatement(), $select->getBindValues())
于 2016-05-25T04:42:01.493 回答
0

您可以使用$select->getBindValues()来获取绑定值。

我会说使用 Aura.Sql 而不是 pdo 因为它在某些其他情况下(例如IN ()查询)可以帮助您。

以自述文件为例。

// a PDO connection
$pdo = new PDO(...);

// prepare the statment
$sth = $pdo->prepare($select->getStatement());

// bind the values and execute
$sth->execute($select->getBindValues());

如果您需要更多说明,请告诉我。

谢谢你。

于 2016-05-25T04:14:58.003 回答