Попытка создать функцию запроса для PDO - PullRequest
2 голосов
/ 02 ноября 2011

Когда я пишу скрипт, я постоянно набираю $ db-> prepare () и $ stmt-> bindParam ().Я ищу способ объединить все это в функции.Это то, что я имею до сих пор.

$sql = "SELECT (name, email) FROM users WHERE VALUES (:name, :email)"
$values = array(':name' => 'my_name', ':email' => 'blahblah@example.com', );

    function db_query($sql, $values) {
    global $db; //Database object

        $stmt = $db->prepare($sql);

        foreach($values as $placeholder => $value) {
            $stmt->bindParam($placeholder, $value);

        }

        $stmt->execute();

        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

        return $result;
      }

Будет ли этого достаточно для большинства запросов?Это безопасный способ сделать это?

Я просто хочу, чтобы запрос выполнялся и возвращал все, что он возвращает (NULL, значения, ошибки и т. Д.).

Спасибо.

1 Ответ

0 голосов
/ 02 ноября 2011

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

Используя ваш пример, это приведет к тому, что все параметры будут установлены на blahblah@example.com, поскольку это последний $value в цикле.

Как уже упоминалось в комментариях, просто используйте $stmt->execute($values). Смотри http://php.net/manual/en/pdostatement.execute.php

Если вы действительно хотите продолжить цикл, используйте вместо него PDOStatement::bindValue().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...