Привязка переменных в aura / sqlquery при использовании подключения mysqli_ *

У меня есть старое приложение, которое использует 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 связь?

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())
1

Другие решения

Ты можешь использовать $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());

Дайте мне знать, если вам нужно больше разъяснений для того же.

Спасибо.

0

По вопросам рекламы [email protected]