MySQL_REAL_ESCAPE_STRING NELUSE
-
05-10-2019 - |
Вопрос
Если я печатаю
'
В мою панель поиска я получаю ошибку 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 Вы использовали для разграничения строки поиска.
Эти апострофы означают, что данные внутри ЯВЛЯЕТСЯ строка.
Все Вы положите в цитаты в запрос - это строка.
Все Вы положите в цитаты в запрос должен быть сбеженным.
Не нужно думать, рассмотреть или оценить. Правило простое и однозначное: цитируемый текст должен всегда избежать.