Skip to content

_bind_params -> query #406

Closed
Closed
@KpuTuK

Description

@KpuTuK

Предлагаю заменить подготавливаемые выражения на

vsprintf($sql, array_filter($params, function ($param){
                return $this->_mysqli->real_escape_string($param);
            }));

например

public function query($sql, array $params = []) {
        if ($params) {
            $sql = vsprintf($sql, array_filter($params, function ($param){
                return $this->_mysqli->real_escape_string($param);
            }));
        }
        return $this->_mysqli>query($sql);
    }

p.s.

Каждый подготавливаемый запрос использует ресурсы сервера. Если запрос больше не нужен, его необходимо сразу закрыть. Если не сделать этого явно, запрос закроется сам, но только когда PHP освободит его дескриптор, как правило это происходит при выходе запроса из области видимости или при завершении работы скрипта.

Использование подготавливаемых запросов не всегда приводит к повышению эффективности. Если параметризованный запрос запускается лишь раз, это приводит к большему количеству клиент-серверных обменов данными, нежели при выполнении простого запроса. Именно по этой причине в примере выше выражение SELECT выполнялось, как обычный запрос.

Также, имеет смысл рассмотреть SQL синтаксис вставки множества значений в выражении INSERT. В примере выше мультивставка (значения для вставки перечисляются через запятую) в предложении INSERT обошлась бы дешевле, чем подготовленный запрос.

http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php Пример №3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions