如何在php类上使用准备好的语句(命名参数)
这是我在这里的第一篇文章。我在这个网站上搜索过,但没有找到匹配的。 无论如何,我想知道如何在类上使用命名参数。 所以pdo的基本形式类似于如何在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)); 我想把它集成到一个类中,不管参数有多少。 目前,我有
$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”它就是一个参数,并绑定它,而不管参数的数量如何。我只是对它进行硬编码,但其思想是,使它更灵活,无需重新命名或给定的命名参数的数量。