2012-11-05 140 views
0

我有一個SQL插入腳本,當用戶在文本區域鍵入文本時更新數據庫中的sql表,但如果用戶在文本中使用撇號,則不會將信息插入表中。這是因爲sql讀撇號作爲結束語或其他什麼。但是有沒有一種方法可以使用一個允許用戶輸入撇號的語句,例如告訴sql使用'%s%'或其他來表示撇號?在sql文本表中插入撇號?

繼承人的SQL更新代碼我使用:

<?php 

session_start(); 

include '_config/connection.php'; 

$status = $_POST['status']; 

$result = mysql_query("SELECT status FROM ptb_profiles WHERE id=".$_SESSION['user_id'].""); 





if(!$result) 
{ 
echo "The username you entered does not exist"; 
} 
else 
if($status!= mysql_result($result, 0)) 
{ 
echo ""; 


    $sql=mysql_query("UPDATE ptb_profiles SET status ='$status' WHERE id=".$_SESSION['user_id'].""); 
} 
    if($sql) 
    { 


} 
header('Location: http://localhost/ptb1/profile.php?id=' . $_SESSION['user_id']); 
?> 

回答

0

變化較小和重寫的代碼行 -

$sql=mysql_query('UPDATE ptb_profiles SET status ="'. mysql_real_escape_string($status) .'" WHERE id='.$_SESSION['user_id']); 
+0

輝煌的這解決了我的問題。非常感謝你。 :) –

+0

'addslashes' _must not_用於轉義SQL輸入。它沒有達到這個目的。 –

+0

這不是一個好的答案addslashes沒有正確審查狀態變量。使用mysql_real_escape_string()的其他答案是正確的。 – Codeguy007

0

更改此:

$sql=mysql_query("UPDATE ptb_profiles SET status ='$status' WHERE id=".$_SESSION['user_id']."");

這樣:

$sql=mysql_query('UPDATE ptb_profiles SET status ="'. mysql_real_escape_string($status) .'" WHERE id='.$_SESSION['user_id']);

附:切勿將變量直接從$ _POST或$ _GET或$ _REQUEST直接插入到SQL中,否則最終會出現SQL注入漏洞。