可能重複一個名字:
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();
因爲您沒有使用準備好的語句。儘管試圖在之後嘗試綁定值,但您仍將值直接連接到SQL命令中。再次查看使用手冊http://php.net/manual/en/pdo.prepared-statements.php – mario
總的旁註; SHA1('$ pwd')將產生字符串'$ pwd'的SHA1字符串。只有雙引號會自動爲您插入可變內容。即使如此,雙引號不需要在那裏,它應該只是SHA1($ pwd) - 它與你的問題無關,只是想讓你知道,因爲你實際上並沒有以這種方式存儲密碼。 :) – Teekin
@mario:這應該是一個答案。 :) – Teekin