【发布时间】:2012-10-03 13:46:06
【问题描述】:
我想知道如何在带有 pdo 类的准备好的语句中使用命名参数,所以对 pdo 的调用如下所示。
$query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww');
$query->execute(array('login' => $login, 'pww' => $pww));
我想把它集成到一个类上,不管参数的数量是多少。
目前,我有this 代码
require_once 'constants.php';
class Mysql extends PDO {
private $con;
public function __construct() {
try {
$this->con = parent::__construct(DB_DSN, DB_USER, DB_PASS);
if ($this->getAttribute(PDO::ATTR_DRIVER_NAME) == DB_TYPE)
$this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);
return $this->con;
} catch (PDOException $e) {
die('Error:' . $e->getMessage());
}
}
public function select($reqSelect) {
try {
$this->con = parent::beginTransaction();
$result = parent::prepare($reqSelect);
$result->execute();
//$this->con = parent::commit();
$this->con = parent::rollBack();
return $result;
$result->closeCursor();
} catch (Exception $e) {
die('Error:' . $e->getMessage());
}
}
public function selectAll($reqSelect) {
$result = parent::prepare($reqSelect);
$result->execute();
$resultat = $result->fetchAll();
return $resultat;
$result->closeCursor();
}
}
对于参数,我使用类似的东西(这是错误的并且容易被注入)
require_once 'classes/Mysql.class.php';
$mysql = new Mysql();
$sql = 'SELECT * FROM articles WHERE id = '.$_GET['id'].' LIMIT 1';
$data = $mysql->select($sql);
谢谢。
【问题讨论】:
-
我不太明白这个问题或问题。
-
+1 尝试使用 PDO
-
澄清一下,您想将 sql 查询传递给一个方法,该方法将解析字符串以从
where子句获取用户输入并将其替换为?,准备语句并绑定抓取的用户输入? -
@PLB:是的!类似的,我解析 sql 字符串的方法和(可能带有一些附加方法的参数)只要有一个“:someting”它的参数,并绑定它,不管参数的数量。
-
我只是对其进行硬编码,但想法是pastebin.com/ViZfuwk0,并使其更灵活、不受约束或指定的命名参数数量。
标签: php class pdo prepared-statement named-parameters