2011-02-26 48 views
1

我的問題是:你如何允許單引號字符串?爲什麼在單引號中插入數據庫時​​會出現錯誤?

例如,我有一個表格和一個文本框。它設置爲允許用戶輸入他們的名字。從那裏,它將數據發佈並提供給數據庫。

我需要能夠允許單引號(撇號),因爲有些人的名字在名字中有一個撇號,例如「O'Reilly」。

有什麼建議嗎?

+3

您不必做任何事情來允許在字符串中使用單引號。 PHP不會自動刪除單引號或任何其他字符。如果用戶使用撇號輸入名稱,它將在'$ _POST'中仍然有一個撇號。那麼你需要幫助的實際問題是什麼? – 2011-02-26 08:07:30

+0

@Dan Grossman的評論+1。也許你試圖問你怎麼「正確地」保存涉及數據庫中單引號的文本信息? – Jairo 2011-02-26 08:10:00

+5

誰投票我的帖子是驢。我正在學習,對我來說,提出一個基本問題並不意味着這是一個愚蠢的問題。 – drewrockshard 2011-02-26 08:10:56

回答

8

單引號不以任何方式禁止。我會簡單地假設你有一個錯誤將其插入到數據庫中。這可能是由於在輸入值上省略了mysql_real_escape_string()

如果您嘗試INSERT ... ('O'Reilly')這是SQL轉義函數的全部要點,那麼您將收到SQL錯誤。

(這就是爲什麼magic_quotes最初介紹:。使SQL工作開箱即用的新人 - 不要做出特別安全)

+0

感謝您的提示和信息迴應。我從來沒有真正處理過我的PHP開發中的單引號,因爲我這樣做(PHP-DEV)。我確實收到MySQL錯誤,而不是PHP錯誤。 'mysql_real_escape_string()'做了詭計!謝謝! – drewrockshard 2011-02-26 08:16:50

5

使用上的任何文字mysql_real_escape_string()功能,你插入你的數據庫。如果您將數據直接發佈到數據庫中,那麼您的腳本中可能會出現錯誤,因爲您實際上正在做的是結束MySQL報價。

這也是您逃避數據安全的必要條件。像下面的內容是你應該擁有的一切:

$q = "INSERT INTO `table` (`body`) VALUES ('".mysql_real_escape_string($_POST['body'])."')"; 
2

如果我正確地讀你的問題,你有一個編碼錯誤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(); 
?> 
0
  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."') 
相關問題