尝试为PDO创建查询功能

时间:2011-11-02 04:02:45

标签: php pdo

在编写脚本时,我正在不断地输入$ 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 :(得分:0)

您的代码将无法按预期工作,因为bindParam()将占位符名称(第一个参数)绑定到第二个参数中存在的变量 reference

使用您的示例,这会导致所有参数都设置为blahblah@example.com,因为它是循环中的最后一个$value

如评论中所述,只需使用$stmt->execute($values)即可。见http://php.net/manual/en/pdostatement.execute.php

如果您真的想继续循环,请改用PDOStatement::bindValue()