我有一个使用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
中获取变量绑定的任何想法?
答案 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());
如果你需要更多澄清,请告诉我。
谢谢。