2012-10-03 23 views
1

可能重複一個名字:
MySQL/PDO/Prepared Statements - All a big jump, a bit overwhelming and a little confusing?無法獲得PDO preparded聲明接受包含撇號

我使用這個代碼將數據插入到一個用戶表。它工作正常,除非用戶的姓氏包含一個撇號(例如O'Toole)。我的理解是,PDO準備的語句應該處理撇號,而我沒有額外的工作。我的假設是不正確的,這就是爲什麼這個代碼不適用於帶撇號的名字?

我沒有收到錯誤消息。

require_once('/database/database.php'); 
$query = "INSERT INTO users 
      (first_name,last_name, email, pass, reg_date) 
      VALUES 
      ('$fn','$ln','$em', SHA1('$pwd'), NOW())"; 

try { 
    $statement=$db->prepare($query); 
    $statement->bindValue(':first_name',$fn); 
    $statement->bindValue(':last_name',$ln); 
    $statement->bindValue(':email',$em); 
    $statement->bindValue(':pass',SHA1('$pwd')); 

    $success = $statement->execute(); 
    $row_count = $statement->rowCount(); 
    $statement->closeCursor(); 
+2

因爲您沒有使用準備好的語句。儘管試圖在之後嘗試綁定值,但您仍將值直接連接到SQL命令中。再次查看使用手冊http://php.net/manual/en/pdo.prepared-statements.php – mario

+0

總的旁註; SHA1('$ pwd')將產生字符串'$ pwd'的SHA1字符串。只有雙引號會自動爲您插入可變內容。即使如此,雙引號不需要在那裏,它應該只是SHA1($ pwd) - 它與你的問題無關,只是想讓你知道,因爲你實際上並沒有以這種方式存儲密碼。 :) – Teekin

+0

@mario:這應該是一個答案。 :) – Teekin

回答

2

你沒有正確使用綁定,試試這個:

$query = "INSERT INTO users 
     (first_name, last_name, email, pass, reg_date) 
     VALUES 
     (:first_name, :last_name, :email, :pass, NOW())"; 

你「綁定」你的價值觀在查詢中的佔位符。

+1

謝謝本,你釘了它!我盯着,詛咒,並譴責這個代碼超過一個小時,從未注意到這一點。 – JEHR

+0

如果有疑問,請查看php.net手冊 - 您已經節省了您的時間;) – BenOfTheNorth