Estoy usando la siguiente secuencia de comandos que toma los datos de un formulario html y los almacena en una base de datos de Postgres. Existe esta función pg_escape_string que almacena el valor del formulario en la variable php. Al buscar en la web, encontré que pg_escape_string escapa de una cadena para insertarla en la base de datos. No estoy muy claro en esto. ¿Qué es lo que realmente escapa? ¿Qué sucede realmente cuando dice que se ha escapado una cuerda?¿Qué hace pg_escape_string exactamente?
<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>
Esto es muy viejo, pero para cualquiera que se encuentre con esto más adelante, pg_escape_string() es una defensa contra la inyección de SQL, pero no lo impide. Usar declaraciones preparadas es mejor. (http://stackoverflow.com/questions/732561/why-is-using-a-mysql-prepared-statement-more-secure-than-using-the-common-escape) – pandubear