PHP PDO:如果我传递带有可变参数的查询,如何转义?
PHP PDO: how to escape if I pass a query with variable parameters?
我正在尝试使用新的 PDO 代码升级我的旧代码。
我曾经在我的主 Class 中有一个通用函数 DoQuery($query);
,比如我的类,所以我可以从任何页面简单地调用它
喜欢
$q = "select * from table where name = 'john' "
$result = $myclass->DoQuery($q); // returns an array i can loop
我当前的密码是
function DoQuery($query, $assoc=0){
try {
$pdo = new PDO('mysql:host='.$this->sql["db_host"].';dbname='.$this->sql["db_data"], $this->sql["db_login"], $this->sql["db_pass"]);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($query);
$stmt->execute();
} catch(Exception $e) {//print error }
if ($assoc){
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else{
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
}
return $rows;
}
所以我不明白如果我有可变参数(如本例中的 'name' 但可以是任何参数),我该如何安全地转义输入?
除非我误打断了你的问题,否则应该这样做..
$q = "select * from table where name = ?";
$params = array('john');
$result = $myclass->DoQuery($q, 0, $params); // returns an array i can loop
然后更新你的函数...
function DoQuery($query, $assoc=0, $params=array()){
$pdo = new PDO('mysql:host='.$this->sql["db_host"].';dbname='.$this->sql["db_data"], $this->sql["db_login"], $this->sql["db_pass"]);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($query);
$stmt->execute($params);
} catch(Exception $e) {//print error }
if ($assoc){
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else{
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
}
return $rows;
}
这是关于该主题的另一个讨论帖。 PHP PDO prepared statements
我正在尝试使用新的 PDO 代码升级我的旧代码。
我曾经在我的主 Class 中有一个通用函数 DoQuery($query);
,比如我的类,所以我可以从任何页面简单地调用它
喜欢
$q = "select * from table where name = 'john' "
$result = $myclass->DoQuery($q); // returns an array i can loop
我当前的密码是
function DoQuery($query, $assoc=0){
try {
$pdo = new PDO('mysql:host='.$this->sql["db_host"].';dbname='.$this->sql["db_data"], $this->sql["db_login"], $this->sql["db_pass"]);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($query);
$stmt->execute();
} catch(Exception $e) {//print error }
if ($assoc){
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else{
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
}
return $rows;
}
所以我不明白如果我有可变参数(如本例中的 'name' 但可以是任何参数),我该如何安全地转义输入?
除非我误打断了你的问题,否则应该这样做..
$q = "select * from table where name = ?";
$params = array('john');
$result = $myclass->DoQuery($q, 0, $params); // returns an array i can loop
然后更新你的函数...
function DoQuery($query, $assoc=0, $params=array()){
$pdo = new PDO('mysql:host='.$this->sql["db_host"].';dbname='.$this->sql["db_data"], $this->sql["db_login"], $this->sql["db_pass"]);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($query);
$stmt->execute($params);
} catch(Exception $e) {//print error }
if ($assoc){
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else{
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
}
return $rows;
}
这是关于该主题的另一个讨论帖。 PHP PDO prepared statements