मैं निम्न स्क्रिप्ट का उपयोग कर रहा हूं जो एक पोस्टग्रेस डीबी में एचटीएमएल फॉर्म और स्टोर्स से डेटा लेता है। यह pg_escape_string फ़ंक्शन है जो फ़ॉर्म से मान को php चर में संग्रहीत करता है। पूरे वेब पर खोज कर, मैंने पाया कि pg_escape_string डेटाबेस में सम्मिलन के लिए एक स्ट्रिंग से बच निकलता है। मैं इस पर ज्यादा स्पष्ट नहीं हूं। यह वास्तव में क्या बच रहा है? वास्तव में क्या होता है जब उसने कहा कि एक स्ट्रिंग बच निकला है?क्या pg_escape_string वास्तव में करता है?
$sql = "INSERT INTO airports (name) VALUES ('$name')";
अब मान लें कि $name
"Chicago O'Hare"
है:
<html>
<head></head>
<body>
<?php
if ($_POST['submit']) {
// attempt a connection
$dbh = pg_connect("host=localhost dbname=test user=postgres");
if (!$dbh) {
die("Error in connection: " . pg_last_error());
}
// escape strings in input data
$code = pg_escape_string($_POST['ccode']);
$name = pg_escape_string($_POST['cname']);
// execute query
$sql = "INSERT INTO Countries (CountryID, CountryName) VALUES('$code', '$name')";
$result = pg_query($dbh, $sql);
if (!$result) {
die("Error in SQL query: " . pg_last_error());
}
echo "Data successfully inserted!";
// free memory
pg_free_result($result);
// close connection
pg_close($dbh);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Country code: <br> <input type="text" name="ccode" size="2">
<p>
Country name: <br> <input type="text" name="cname">
<p>
<input type="submit" name="submit">
</form>
</body>
</html>
यह वास्तव में पुराना है, लेकिन बाद में किसी के आने के लिए, pg_escape_string() एसक्यूएल इंजेक्शन के खिलाफ एक रक्षा है, लेकिन इसे रोकता नहीं है। तैयार बयान का उपयोग करना बेहतर है। (http://stackoverflow.com/questions/732561/why-is-using-a-mysql-prepared-statement-more-secure-than-using-the-common-escape) – pandubear