我的問題是:你如何允許單引號字符串?爲什麼在單引號中插入數據庫時會出現錯誤?
例如,我有一個表格和一個文本框。它設置爲允許用戶輸入他們的名字。從那裏,它將數據發佈並提供給數據庫。
我需要能夠允許單引號(撇號),因爲有些人的名字在名字中有一個撇號,例如「O'Reilly」。
有什麼建議嗎?
我的問題是:你如何允許單引號字符串?爲什麼在單引號中插入數據庫時會出現錯誤?
例如,我有一個表格和一個文本框。它設置爲允許用戶輸入他們的名字。從那裏,它將數據發佈並提供給數據庫。
我需要能夠允許單引號(撇號),因爲有些人的名字在名字中有一個撇號,例如「O'Reilly」。
有什麼建議嗎?
單引號不以任何方式禁止。我會簡單地假設你有一個錯誤將其插入到數據庫中。這可能是由於在輸入值上省略了mysql_real_escape_string()
。
如果您嘗試INSERT ... ('O'Reilly')
這是SQL轉義函數的全部要點,那麼您將收到SQL錯誤。
(這就是爲什麼
magic_quotes
最初介紹:。使SQL工作開箱即用的新人 - 不要做出特別安全)
感謝您的提示和信息迴應。我從來沒有真正處理過我的PHP開發中的單引號,因爲我這樣做(PHP-DEV)。我確實收到MySQL錯誤,而不是PHP錯誤。 'mysql_real_escape_string()'做了詭計!謝謝! – drewrockshard 2011-02-26 08:16:50
使用上的任何文字mysql_real_escape_string()功能,你插入你的數據庫。如果您將數據直接發佈到數據庫中,那麼您的腳本中可能會出現錯誤,因爲您實際上正在做的是結束MySQL報價。
這也是您逃避數據安全的必要條件。像下面的內容是你應該擁有的一切:
$q = "INSERT INTO `table` (`body`) VALUES ('".mysql_real_escape_string($_POST['body'])."')";
如果我正確地讀你的問題,你有一個編碼錯誤SQL Injection到你的程序,允許輕微惡意攻擊者和病毒的讀寫數據庫。 (想象一下,有人鍵入';drop table users;
到現場......再見數據。)
打擊SQL注入攻擊最簡單的方法是編寫使用prepared statements SQL查詢,其查詢數據庫庫安全地處理輸入數據:
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
USe like:-
insert into question(question,points,choice1,choice2,
choice3,choice4,choice3_correct,tags,error_status,
base_or_derived,language)
values('".mysql_real_escape_string($result4)."',
'".$points."','".$ans1."','".$ans2."',
'".$correct_ans."','".$ans3."','1','".$tags."',
'".$error."','D','".$language."')
您不必做任何事情來允許在字符串中使用單引號。 PHP不會自動刪除單引號或任何其他字符。如果用戶使用撇號輸入名稱,它將在'$ _POST'中仍然有一個撇號。那麼你需要幫助的實際問題是什麼? – 2011-02-26 08:07:30
@Dan Grossman的評論+1。也許你試圖問你怎麼「正確地」保存涉及數據庫中單引號的文本信息? – Jairo 2011-02-26 08:10:00
誰投票我的帖子是驢。我正在學習,對我來說,提出一個基本問題並不意味着這是一個愚蠢的問題。 – drewrockshard 2011-02-26 08:10:56