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

如何在php类上使用准备好的语句(命名参数),php,class,pdo,prepared-statement,named-parameters,Php,Class,Pdo,Prepared Statement,Named Parameters,这是我在这里的第一篇文章。我在这个网站上搜索过,但没有找到匹配的。 无论如何,我想知道如何在类上使用命名参数。 所以pdo的基本形式类似于 $query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww'); $query->execute(array('login' => $login, 'pww' => $pww)); 我想把它集成到一个类中,不管参数有多少。 目前,我有

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

$query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww');
$query->execute(array('login' => $login, 'pww' => $pww));
我想把它集成到一个类中,不管参数有多少。 目前,我有这个代码

对于参数,我使用了一些东西,比如(这是错误的,容易被注入)


谢谢。

看来我已经弄明白了,诀窍是在函数中添加一个可选参数,您可以在需要使用准备好的语句(命名参数)时使用它。 所以函数是这样的

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 />';
    }
//第一个参数,SQL。这里我们有命名参数,所以我们需要它们来绑定
$sql='从发布=:number'的文章中选择*;
//第二个参数,将与命名参数绑定的参数
$param=数组(':number'=>1);
$query=$mysql->selectAll($sql,$param);
foreach($queryas$row){
摘录(行);
回显$title.“
”; }

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

看来我已经弄明白了,诀窍是在函数中添加一个可选参数,您可以在需要使用准备好的语句(命名参数)时使用它。 所以函数是这样的

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 />';
    }
//第一个参数,SQL。这里我们有命名参数,所以我们需要它们来绑定
$sql='从发布=:number'的文章中选择*;
//第二个参数,将与命名参数绑定的参数
$param=数组(':number'=>1);
$query=$mysql->selectAll($sql,$param);
foreach($queryas$row){
摘录(行);
回显$title.“
”; }

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

我不太理解这个问题。+1为了尝试使用PDO来澄清,您希望将sql查询传递给一个方法,该方法将解析字符串以从
where
子句获取用户输入,并将其替换为
,准备语句并绑定抓取的用户输入?@PLB:是的!类似的,我使用了一种解析sql字符串的方法(可能还有一些附加方法的参数),只要有“:someting”它就是一个参数,并绑定它,不管参数有多少。我只是对它进行了硬编码,但其思想是,使它更灵活,regadless或给定的命名参数的数量。我不太理解这个问题或问题。+1为了尝试使用PDO进行澄清,您希望将sql查询传递给一个方法,该方法将解析字符串以从
where
子句获取用户输入,并将其替换为
,准备语句并绑定抓取的用户输入?@PLB:是的!类似的,我使用了一种解析sql字符串的方法(可能还有一些附加方法的参数),只要有“:someting”它就是一个参数,并绑定它,而不管参数的数量如何。我只是对它进行硬编码,但其思想是,使它更灵活,无需重新命名或给定的命名参数的数量。