Вопрос

Если я печатаю

'

В мою панель поиска я получаю ошибку MySQL, так как «жгучий» не сберегается.

Но причина, почему я не могу избежать, это потому, что я не думаю, что это в настоящее время - это строка.

Коробка поиска генерирует результаты поиска динамически с AJAX, оно так, как я нахожу и находит результаты, которые я получаю ошибку:

    You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near '%' OR Location
LIKE '%'%' OR Map LIKE '%'%' LIMIT 0, 16' at line 2

Это запрос MySQL:

<?php 
    if($_POST['q']!=""){
  include $_SERVER['DOCUMENT_ROOT'] . "/include/datebasecon.php";
        $result = mysql_query("
          SELECT id, Name, Location,  Map
          FROM Accommodation WHERE Name LIKE '%".$_POST['q']."%' OR Location LIKE '%".$_POST['q']."%' OR Map LIKE '%".$_POST['q']."%' LIMIT 0, 16") 
        or die(mysql_error());
        $output = "";
        while($row = mysql_fetch_array($result)){
            $N = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Name']);
            $L = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Location']);
            $M = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Map']);
            $output .= "<p>".$N." - ".$L."</p>";    
        }

        print $output;

    }
?>

Есть ли в любом случае, я могу починить это после его поста, может быть, может быть?

Это было полезно?

Решение

Когда magic_quotes_gpc выключен (как это должно быть!), $_POST['q'] просто строка ', как только один персонаж. Вот почему он появляется в вашем SQL-коде, как это:

%' OR Location LIKE '%'%' OR Map LIKE '%'%' LIMIT 0, 16

Ошибка происходит в '%'%' поскольку LIKE Строка преждевременно прекращается.

Вы можете просто использовать mysql_real_escape_string() на $_POST['q'] И это будет сбежать:

$q = mysql_real_escape_string($_POST['q']);
$result = mysql_query("
  SELECT id, Name, Location,  Map
  FROM Accommodation WHERE Name LIKE '%".$q."%' OR Location LIKE '%".$q."%' OR Map LIKE '%".$q."%' LIMIT 0, 16") 
or die(mysql_error());

Другие советы

Вы написали «Я не думаю, что это сейчас строка» ... это строка. Вы можете передать это mysql_real_escape_string() и используйте результат, чтобы сделать ваш запрос в безопасности и надежным. Все, что ваш скрипт получает по $_POST, $_GET, $_REQUEST а также $_COOKIE Пармы могут быть использованы в качестве строки, за исключением того, что это массив.

Чтобы вы поняли.
Посмотрите на ваш запрос:

LIKE '%search string%'

Примечание. APOSTROPHES Вы использовали для разграничения строки поиска.
Эти апострофы означают, что данные внутри ЯВЛЯЕТСЯ строка.
Все Вы положите в цитаты в запрос - это строка.
Все Вы положите в цитаты в запрос должен быть сбеженным.
Не нужно думать, рассмотреть или оценить. Правило простое и однозначное: цитируемый текст должен всегда избежать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top