Я хочу предоставить инструкцию SQL из строки запроса, но все мои усилия приводят к сбрасыванию одинарных кавычек и слэшей.
Во-первых, убедитесь, что вы действительно действительно хотите это сделать. Это созрело для атаки SQL Injection.
Если вы хотите, чтобы что-то запускало заявления в отношении базы данных MySQL, просто используйте PHP-приложение для работы с phpMyAdmin или MySQL.
как я могу реализовать это в родовом способ?
Все запросы должны быть жестко закодированы в вашем script.
Конечно, некоторые из них могут быть динамически построены, но вам разрешено создавать только DATA динамические, а не управляющие структуры.
Итак, это должно быть так:
$name=mysql_real_escape_string($_POST['name']);
if ($id = intval($_POST['id'])) {
$query="UPDATE table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO table SET name='$name'";
}
или это:
if (!isset($_GET['id'])) {
$query="SELECT * FROM table";
} else {
$id = intval($_GET['id'];
$query="SELECT * FROM table WHERE id=$id";
}
или что-то еще.
Конечно, вставленные данные должны быть надлежащим образом экранированы, лишены или привязаны.
Но иногда нам нужно использовать динамический оператор или идентификатор. Принцип один и тот же: все должно быть жестко закодировано в вашем script, ничего не должно передаваться с клиентской стороны непосредственно в SQL-запрос.
Скажем, чтобы сделать динамическую сортировку, вы можете использовать такой код
$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders));
$orderby=$orders[$key];
$query="SELECT * FROM `table` ORDER BY $orderby";
или для сборки динамического ГДЕ:
$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";
if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";
Предполагая, что вы используете mysql, используйте mysql_real_escape_string()
http://www.php.net/manual/en/function.mysql-real-escape-string.php