我有這個PDO包裝pdo是否逃避語句?
private function cleanup($bind) {
if(!is_array($bind)) {
if(!empty($bind))
$bind = array($bind);
else
$bind = array();
}
return $bind;
}
public function run($sql, $bind="") {
$this->sql = trim($sql);
$this->bind = $this->cleanup($bind);
$this->error = "";
array_push($this->qs, $sql);
try {
$pdostmt = $this->prepare($this->sql);
if($pdostmt->execute($this->bind) !== false) {
if(preg_match("/^(" . implode("|", array("select", "describe", "pragma")) . ") /i", $this->sql))
return $pdostmt->fetchAll(PDO::FETCH_ASSOC);
elseif(preg_match("/^(" . implode("|", array("delete", "insert", "update")) . ") /i", $this->sql))
return $pdostmt->rowCount();
}
} catch (PDOException $e) {
$this->error = $e->getMessage();
$this->debug();
return false;
}
}
我曾與這個沒有問題,因爲我開始使用它一對夫婦幾年前,因爲字符串沒有逃過我現在收到錯誤消息。也許我從來沒有像這樣的場景。
下面是導致該問題
$db->run("SELECT region_id FROM region WHERE name = '$name'");
其中$name
是霍克斯灣的SQL語句。我的印象是PDO逃脫了字符串,好像我錯了。任何想法如何解決這個問題?
如果您未使用PDO :: prepare,則需要使用PDO :: quote手動轉義字符串。 – DevlshOne
@DevlshOne'$ pdostmt = $ this-> prepare($ this-> sql);'有準備 – slash197
@ slash197您是否至少閱讀過代碼?沒有什麼可以在聲明中準備 –