使用mysqli_ *连接时,aura / sqlquery中的变量绑定

时间:2016-05-25 04:03:44

标签: php mysql mysqli pdo auraphp

我有一个使用mysqli_*()函数的遗留应用程序(实际上,它使用mysql_*()函数.Gah!)。我使用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;

现在我想在where()

中做一些变量绑定
$select->where('t.somefield = ?', $somevalue);

当我转换为字符串时,似乎永远不会发生转义/绑定。似乎绑定仅在使用PDO和预处理语句时发生。

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

2 个答案:

答案 0 :(得分:1)

如果你的PHP版本是&gt; = 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())

答案 1 :(得分: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());

如果你需要更多澄清,请告诉我。

谢谢。