Как считать и автоматически создавать bindParams в pdo? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь создать функцию для автоматического создания bindParams для функции из Ваше общее мнение

Здесь Вспомогательные функции PDO .

ВНИМАНИЕ: Я знаю, как использовать функцию с исполнением, я пытаюсь использовать в ней привязки.

Вот функция, которую я пытаюсь выполнить. Эта функция вызывает другую функцию, которая считает и создает bindParams:

function insert($sql, $param_types, $args) {
    $stmt= $this->pdo->prepare($sql);
    $this->CreateParams($sql, $param_types, $args);
    $stmt->execute();
}

Вот вторая функция, которая будет подсчитывать и связывать значения:

function CreateParams($sql, $param_types $args) {
    $param_references[] = & $param_types;
    for($i=0; $i<count($args); $i++) {
        $param_references[] = & $args[$i];
    }
    call_user_func_array(array(
        $sql,
        'bindParam'
    ), $param_references);
}

Это использование:

$sql = "INSERT INTO Auth_tokens (username, password_hash, selector_hash, expiry_date) values (?, ?, ?,?)";  
insert($sql, 'param_types', array($username, $random_password_hash, $random_selector_hash, $expiry_date));

Я пытался использовать func_get_args(); в параметре, но перепутал: (

Спасибо

1 Ответ

2 голосов
/ 07 января 2020

Ваша функция может быть упрощена до:

function insert($sql, $param_types, $args) {
    $stmt= $this->pdo->prepare($sql);
    $stmt->execute($args);
}

Поскольку execute может использовать массив значений в качестве аргумента. Эти значения будут использоваться в запросе.

В этом случае $param_types аргумент бесполезен .

Обновление : все еще не ясно, что вы ожидается, но код для начала:

function insert($sql, $param_types, $args) {
    $stmt= $this->pdo->prepare($sql);
    $this->CreateParams($stmt, $param_types, $args);
    $stmt->execute();
}

function CreateParams($stmt, $param_types, $args) {
    $i = 0;
    foreach ($args as $argument) {
        $stmt->bindValue($i + 1, $argument, $param_types[$i]);
        $i++;
    }
}

// Calling as:

insert(
    'INSERT INTO Auth_tokens (username, password_hash, selector_hash, expiry_date) values (?, ?, ?, ?)', 
    [\PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR], 
    [$username, $random_password_hash, $random_selector_hash, $expiry_date]
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...