2012-05-03 185 views
0

我真的很感激任何幫助,我可以得到這一點。mysql_real_escape_string被忽略

我有一個形式,真正的麻煩,我不能似乎得到mysql_real_escape_string在所有的工作。

我使用MySQL 5.5與PHP並測試它我創建了一個簡單的表格 Magic Quotes根本沒有打開。

使用這種形式:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form name="event_ad" action="test.php" method="post"> 
    <table> 
    <tr> 
     <td>Event Name:</td> 
     <td><input name="event_name" type="text" size="90" /></td> 
    </tr> 
    <tr> 
     <td>Start Date:</td> 
     <td><input name="start_date" type="text" size="90" /></td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"><input name="Submit" type="submit" id="Submit" value="Add New Event" /></td> 
    </tr> 
    </table> 
</form> 
</body> 
</html> 

然後,數據是n要表輸入使用test.php的

<?php 
    mysql_connect("localhost","username","password") or die(mysql_error()); 
    mysql_select_db("databasename") or die(mysql_error()); 

    $name = $_POST['event_name']; 
    $sdate = $_POST['start_date']; 
    $name = mysql_real_escape_string($name); 

    $sql = "INSERT INTO tblevents (event_name, event_date) VALUES ('" . $name . "','" . $sdate . "')"; 

    mysql_query($sql); 

    echo "success"; 
?> 

(連接細節改變)

當我輸入事件名稱Ò 「裏利‘Smith’的它被插入到MySQL表作爲O'Rielly‘史密斯’

有是沒有反斜槓,沒有逃脫。

我真的已經蒐羅互聯網試圖來解決這一問題,但它似乎適用於其他人。

我是否在這裏誤解了一些基本的東西? 如果有人能引導我走向正確的方向,我會深表感謝。

這是我在這個論壇上的第一篇文章,並且HTML和代碼格式不似乎是一樣的我曾參觀過最論壇,你不能預覽,所以我希望這原來確定。

提前向任何人提供幫助。 乾杯。

+7

忘記mysql_real_escape_string。改用mysqli或PDO並綁定參數。 – Quentin

+2

你怎麼知道它在做什麼?你在迴應'$ name'嗎? –

+0

對不起,它不回答你的問題,但我強烈建議切換到沿着PDO的路線。 Mysql函數從PHP版本5.4開始被棄用。 –

回答

2
逃脫

當我輸入的事件名稱O'Rielly「史密斯」,它被插入到MySQL表爲O'Rielly「史密斯」

ŧ帽子是應該發生的。

逃逸使數據通過查詢,以便將原始數據在數據庫中結束。其目的不是爲存儲的數據添加額外的字符,而是爲了阻止具有特殊含義的字符中斷SQL。

3

這是通過設計,你不應該在你的表中看到任何轉義的輸入。這只是爲了插入。通過使用mysql_real_escape_string,您的查詢看起來像

INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')"; 

當這些反斜線確保你不破撇號

MySQL的「刪除」的所有反斜線直到他們通過反斜槓:)

+0

+1。轉義數據僅用於查詢解析器。整個觀點是將真實的數據輸入表格。 – Brad

+0

Thanx Martin。這正是我一直在尋找的信息,但有趣的是,我無法在任何地方找到。 我現在對這個工作原理有了更好的理解。 乾杯。 – Almeister9

+0

如果您最喜歡我的回答,請在左邊勾選接受。謝謝 –

0

認爲逃避作爲生日禮物上的包裝紙的等價物。

,使數據中的任何特殊字符在傳輸過程中失去了它們的特殊含義你逃跑的數據。一旦它們在目標系統「內部」(html頁面,數據庫記錄等)中,轉義就不再是必要的了,因爲他們可能已經影響到這個過程的地方現在已經結束了。

與包裝的禮物一樣 - 一旦收到禮物,您不再需要包裝紙,因此將其刪除。

0

它工作正常。

刪除mysql_real_escape_string將防止數據被插入。

+0

我現在開始瞭解,但不幸的是,如果我刪除mysql_real_escape_string,數據仍會插入到表中,不管數據如何。這就是爲什麼我感到困惑。 – Almeister9

0
$name = $_POST['event_name']; 
$sdate = $_POST['start_date']; 


$db = new mysqli("localhost", "username", "password", "databasename"); 

$query = "INSERT INTO tblevents (event_name, event_date) VALUES (?, ?)"; 
$statement = $db->prepare($query); 
$statement->bind_param("ss", $name, $sdate); 

$statement->execute(); 
$statement->close(); 

$db->close(); 

(我省略了錯誤檢查連接)