PHP апостроф и строка запроса

0

Я хочу предоставить инструкцию SQL из строки запроса, но все мои усилия приводят к сбрасыванию одинарных кавычек и слэшей.

  • 1
    Пожалуйста, покажите нам ваш код, ваш ввод и ваш вывод.
  • 4
    Если я правильно читаю ваш вопрос, то настоятельно рекомендую не принимать запрос SQL в строке запроса.
Показать ещё 5 комментариев
Теги:

3 ответа

2
Лучший ответ

Во-первых, убедитесь, что вы действительно действительно хотите это сделать. Это созрело для атаки SQL Injection.

Если вы хотите, чтобы что-то запускало заявления в отношении базы данных MySQL, просто используйте PHP-приложение для работы с phpMyAdmin или MySQL.

0

как я могу реализовать это в родовом способ?

Все запросы должны быть жестко закодированы в вашем 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";
0

Предполагая, что вы используете mysql, используйте mysql_real_escape_string()

http://www.php.net/manual/en/function.mysql-real-escape-string.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню