我仍然在學習PDO,所以我可能錯過了一些東西,但基本上我試圖插入一行到表中,然後選擇生成的ID。PDO多查詢「SQLSTATE [HY000]:一般錯誤」
我不確定它是否喜歡一個pdo語句中的兩個查詢。這裏是我用來執行SQL的代碼。
public function ExecuteQuery($sql, $params = array())
{
if($this->_handle == null)
$this->Connect();
$query = $this->_handle->prepare($sql);
foreach($params as $key => $value)
{
if(is_int($value)){
$query->bindValue(':'.$key, $value, \PDO::PARAM_INT);
}else if(is_bool($value)){
$query->bindValue(':'.$key, $value, \PDO::PARAM_BOOL);
}else if(is_null($value)){
$query->bindValue(':'.$key, $value, \PDO::PARAM_NULL);
}else{
$query->bindValue(':'.$key, $value, \PDO::PARAM_STR);
}
}
$query->execute();
$x = $query->fetchAll(\PDO::FETCH_ASSOC);
var_dump($x);
return $x;
}
該函數是數據庫類的一部分,$ this - > _ handle是PDO對象。
public function Connect()
{
try {
$this->_handle = new \PDO('mysql:host='.$this->_host.';dbname='.$this->_database, $this->_username, $this->_password);
$this->_handle->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
而且我運行的SQL是這樣的:
INSERT INTO `users` (`Username`, `Password`, `PasswordSalt`, `Email`, `IsAdmin`, `LoginAttempts`, `LastLogin`, `LastLoginAttempt`, `Created`) VALUES (:username, :password, :passwordsalt, :email, :isadmin, :loginattempts, :lastlogin, :lastloginattempt, :created); SELECT LAST_INSERT_ID() as 'id'
用戶創建,並在有用戶表但之後它的錯誤。
任何人都可以看到什麼做錯了嗎? :)
乾杯!
我想這是因爲PDO驅動用的mysql_query其下方犯規支持多個查詢,因爲我已經回到了使用的mysqli的multi_query及其工作很好:) –
與pdo_mysql,要使用多個查詢你必須setAttribute(PDO :: ATTR_EMULATE_PREPARES,真)你PDO或PDOStatement。另外pdo不使用下面的mysql_query ...這是一種替換mysql_ *擴展的方法 –