У меня есть старое приложение, которое использует mysqli_*()
функции (на самом деле, он использует mysql_*()
функции. Г!). я использую Аура / 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
связь?
Если ваша версия 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())
Ты можешь использовать $select->getBindValues()
чтобы получить значения привязки.
Я скажу использовать Aura.Sql, чем pdo, поскольку он помогает вам в некоторых других случаях, таких как IN ()
запрос.
Принимая пример из readme.
// a PDO connection
$pdo = new PDO(...);
// prepare the statment
$sth = $pdo->prepare($select->getStatement());
// bind the values and execute
$sth->execute($select->getBindValues());
Дайте мне знать, если вам нужно больше разъяснений для того же.
Спасибо.