2015-05-09 84 views
0

所以我有以下代碼,主要是從php.net's SQLite3 prepare statement page的例子改編而來。準備好的陳述問題/ bindValue

$stmt = $db->prepare("INSERT INTO users (accesstoken, authed, ckey, staff) VALUES (':password', 'false', ':ckey' ,'true');"); 
$stmt->bindValue(':ckey',$_POST["ckey"]); 
$hashedpw = password_hash($veri_password, PASSWORD_DEFAULT); 
$stmt->bindValue(':password',$hashedpw); 
$result = $stmt->execute(); 

我想它會工作,但是當我手動檢查數據庫中我看到這一點:

:ckey, :password, false, false作爲插入的行。 我似乎無法修復它,我嘗試刪除它周圍的引號,而不是拋出一個錯誤。我交換了引用類型,並且得到了未定義的列或其他錯誤。

下面是代碼的剪斷之前正確的:

$stmt = $db->prepare("select * from `users` WHERE ckey = :ckey"); 
$stmt->bindValue(":ckey",$_POST["ckey"]); 
$result = $stmt->execute(); 

這工作得很好但它是一個選擇查詢,而不是插入和它只有綁定一個值。我已經看了至少10-15個相關的問題,仍然無法解決它,一個建議使用'而不是",但這並沒有解決它的另一個建議使用?而不是:ckey,並留下了問號我的數據庫(如何適合),我仍然無法解決它。

+1

嘗試刪除周圍的單引號':在查詢ckey':password'和'本身。 – Cfreak

+0

它仍然存在,我剛剛檢查了我的服務器日誌中的提示,並且我將重新安裝我的測試服務器並再次測試我的代碼,因爲我覺得有什麼不對,而其他人似乎也有同樣的問題。 – Codingale

+0

好吧,重新安裝後,我的代碼有點破碎,但現在它刪除引號後正常工作..我認爲我的安裝已損壞或什麼。 – Codingale

回答

1

的問題是與引號改變

$stmt = $db->prepare("INSERT INTO users (accesstoken, authed, ckey, staff) VALUES (':password', 'false', ':ckey' ,'true');"); 

$stmt = $db->prepare("INSERT INTO `users` (accesstoken, authed, ckey, staff) VALUES (:password, 0, :ckey ,1)"); 

感謝Cfreak

相關問題