2

这是我在此的头一篇博文。我在网站上搜索过,但没有匹配项。无论如何,我想知道如何在类上使用命名参数。所以 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);

谢谢。

4

1 回答 1

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 />';
    }

我不知道这是否被认为是最佳实践,安全甚至正确。如果我弄错了,请随时纠正我。

于 2012-10-03T20:44:49.230 回答