如何在php类上使用预准备语句(命名参数)

时间:2012-10-03 13:46:07

标签: php class pdo prepared-statement named-parameters

这是我在这里的第一篇文章。我在网站上搜索,但inforutunaly没有匹配。 无论如何,我想知道如何在类上使用命名参数。 所以pdo基本形式就像是。

$query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww');
$query->execute(array('login' => $login, 'pww' => $pww));

我希望将它集成到一个类上,而不管参数的数量。 目前,我有这个代码

http://pastebin.com/kKgSkaKt

对于参数,我会使用像(这是错误的,容易受到注射)等事情。

require_once 'classes/Mysql.class.php';
$mysql = new Mysql();
$sql = 'SELECT * FROM articles WHERE id = '.$_GET['id'].' LIMIT 1';
$data = $mysql->select($sql);

谢谢。

1 个答案:

答案 0 :(得分:0)

所以似乎我已经弄明白了,诀窍是在函数中添加一个可选参数,当你需要使用预处理语句(命名参数)时就可以使用它。 所以功能类似于

public function selectAll($reqSelect, $param = null) {
                $result = parent::prepare($reqSelect);
          //Check whether the parameter was passed or not
                if (is_null($param)) {
                    $result->execute();
                    $resultat = $result->fetchAll();
                    return $resultat;
                }else{
          //Binding the parameters
                   $result->execute($param);
                   $resultat = $result->fetchAll();
                    return $resultat;
                }
                $result->closeCursor();
        }

并且为了应用它,它就像

//First param, the SQL. Here we have named parameters, so we need them to get bind
$sql = 'SELECT * FROM articles WHERE publish = :number';
//Second param, the parameters that will get bind with the named ones
    $param = array(':number' => 1);

    $query = $mysql->selectAll($sql, $param);

    foreach ($query as $row) {
        extract($row);
        echo $title . '<br />';
    }

我不知道这是否被认为是最佳做法,有保障甚至是正确的。如果我错了,请随意纠正我。