Если я набираю
в моей строке поиска. Я получаю ошибку mysql, так как "sting" не удалось избежать.
Но причина, по которой я не могу избежать этого, состоит в том, что я не думаю, что в настоящее время это строка.
окно поиска генерирует результаты поиска динамически с помощью 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());
Чтобы вы поняли.
Посмотрите на свой запрос:
LIKE '%search string%'
отметить апострофы, которые вы использовали для разграничения строки поиска.
Эти апострофы означают, что данные внутри IS строки.
Все вы помещаете в кавычки в запрос строку.
Все вы помещаете кавычки в запрос must.
Не нужно думать, рассматривать. Правило прост и недвусмыслен: цитируемый текст всегда должен быть экранирован.
Вы написали "Я не думаю, что в настоящее время это строка"... это строка. Вы можете передать его mysql_real_escape_string()
и использовать результат, чтобы сделать ваш запрос безопасным и надежным. Все ваши script, получаемые параметрами $_POST
, $_GET
, $_REQUEST
и $_COOKIE
, могут использоваться как строка, за исключением массива.
I don't think it currently is a string.
и что это?