динамическое создание подготовленного выражения

xbs

Новичок
динамическое создание подготовленного выражения

В связи с тем, что значения для подготовленного выражения задаются не массивом, а каждое по очереди в функции mysqli_stmt_bind_param($stmt,$types, $var1, $var2, ...), означает ли это, что невозможно создать запрос динамически, т.е. по каким-то условиям добавить в SQL-выражение дополнительные необходимые параметры?

Для примера:
PHP:
$dbfields = 'u_login=?';
$dbtypes = 's';
if (!empty($this->pswd)) {
  $dbfields .= ", u_pswd=PASSWORD(?)";
  $dbtypes .= 's';
}
$stmt = mysqli_prepare($this->db, 'UPDATE users SET '.$dbfields.' WHERE u_id=?');
$dbtypes .= 'd';
mysqli_stmt_bind_param($stmt, $dbtypes, $this->login, .... , $this->id);
mysqli_stmt_execute($stmt) or sqlError();
хотелось бы вместо .... поставить $this->pswd при условии !empty($this->pswd), и в противном случае исключить эту переменную из запроса

правильно ли я понимаю, что обычные запросы куда более гибки для составления?
 

fixxxer

К.О.
Партнер клуба
(отвлеченно)
ну, понятное дело что простые манипуляции со строками всегда будут гибче любого специализированного механизма, но всякие плейсхолдеры и придуманы чтобы избежать рутинных преобразований и ошибок sql синтаксиса.

тут еще какое дело, такие механизмы обычно используют внутренний биндинг в mysql, т.е. когда ты сделал prepare ты уже выполнил фазу компиляции запроса и далее только подставляешь значения, количество и порядок которых уже известны. а проблема с динамическим количеством параметров давно известна и все решают ее по своему, в качестве примера можно глянуть котеровский dbsimple.

(по теме)
call_user_func_array, если нет ничего более подходящего (не пользуюсь mysqli).
 
Сверху