2010-04-07 14 views
8

साथ डेटाबेस में डालने मैं काफी खेद लगता है अगर इस तरह के एक आसान समस्या पीएचपी के लिए नया हूँ ... :)कैसे उद्धरण से बचने के लिए जब पीएचपी

मैं जब सामग्री जो उद्धरण शामिल सम्मिलित करने में कोई त्रुटि संदेश हो रही है मेरे डीबी में यहाँ क्या मैं उद्धरण भागने की कोशिश कर की कोशिश की लेकिन काम नहीं किया है:

$con = mysql_connect("localhost","xxxx","xxxxx"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("test", $con); 

$nowdate = date('d-m-Y') 

$title = sprintf($_POST[title], mysql_real_escape_string($_POST[title])); 

$body = sprintf($_POST[body], mysql_real_escape_string($_POST[body])); 

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),"; 

if (!mysql_query($sql,$con)) 
    { 

die('Error: ' . mysql_error()); 

} 

header('Location: index.php'); 

आप किसी भी समाधान कृपया प्रदान कर सकता है?

अग्रिम धन्यवाद।

मौरो

+2

कृपया त्रुटि संदेश दिखाएं, आप पहले से ही डेटा से बच रहे हैं। –

उत्तर

12

यह sprintf सामान

$title = mysql_real_escape_string($_POST[title]); 
$body = mysql_real_escape_string($_POST[body]); 
+0

धन्यवाद, यह एक आकर्षण की तरह काम करता है! – Mauro74

+1

@Mauro: फिर भी आपको इसका उपयोग नहीं करना चाहिए, बल्कि इसके बजाय पैरामीटरयुक्त कथन। – Tomalak

+1

@ टोमालक "चाहिए" लेकिन "अनुशंसित" नहीं है। तैयार बयान अधिक मूर्ख-प्रमाण हैं, हां, लेकिन फिर भी चांदी की बुलेट नहीं है। –

2
किसी भी डेटाबेस क्वेरी के साथ

बिना काम करना चाहिए, विशेष रूप से एक वेब आधारित आवेदन से सम्मिलित करता है, तुम सच में मानकों का प्रयोग करके किया जाना चाहिए। अपने प्रश्नों में पैरामीटर का उपयोग करने के तरीके पर PHP सहायता के लिए यहां देखें: PHP parameters

यह एसक्यूएल इंजेक्शन हमलों को रोकने में मदद करेगा और साथ ही आपको पात्रों से बचने से रोक देगा।

+0

धन्यवाद मैं इसे देख लूँगा! :) – Mauro74

2

आपका कोड

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),"; 

के रूप में इस प्रकार है

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate')"; 

अल्पविराम क्वेरी

+0

हाँ मुझे पता है कि अल्पविराम सिर्फ एक टाइपो था। – Mauro74

13

कृपया तैयार पैरामिट्रीकृत बयानों का उपयोग शुरू के अंत में वहां नहीं होना चाहिए होना चाहिए। वे किसी भी एसक्यूएल एस्केपिंग दुःख की आवश्यकता को हटाते हैं और एसक्यूएल इंजेक्शन लोफोल को बंद करते हैं जो स्ट्रिंग-कंसेटेड एसक्यूएल स्टेटमेंट्स खुलते हैं। इसके अलावा वे एक लूप में इस्तेमाल होने पर और अधिक तेज़ी से काम करने के लिए और अधिक प्रसन्न होते हैं।

$con = new mysqli("localhost", "u", "p", "test"); 
if (mysqli_connect_errno()) die(mysqli_connect_error()); 

$sql = "INSERT INTO articles (title, body, date) VALUES (?, ?, NOW())"; 
$stmt = $con->prepare($sql); 
$ok = $stmt->bind_param("ss", $_POST[title], $_POST[body]); 

if ($ok && $stmt->execute()) 
    header('Location: index.php'); 
else 
    die('Error: '.$con->error); 
संबंधित मुद्दे