Я посылаю параметры в URL. но при попытке записать переменную «0 + 880» в URL, запрос не выполняется. это проблема, и вот несколько моих кодов
$table = $_GET['table'];
$yerId= $_GET['km'];
$sql = pg_query("SELECT turu, hat_kesimi, ili, ilcesi, mahadi FROM $table WHERE km = $yerId");
if (!$sql) {
echo "Problem with query " . $sql . "<br/>";
echo pg_last_error();
exit();
}
и вот URL-адреса и что гугл вернул URL:
/weekend/index.php?dbname=tcdd&table=hemzemin_gecit&km=0^880#tab-1
гугл реакция:
Проблема с запросом
ERROR: operator does not exist: character varying = double precision
LINE 1: ...mi, ili, ilcesi, mahadi FROM hemzemin_gecit WHERE km = 0^880
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
другой URL:
/weekend/index.php?dbname=tcdd&table=hemzemin_gecit&km=0%2B880#tab-1
гугл реакция:
Проблема с запросом
ERROR: operator does not exist: character varying = integer
LINE 1: ...mi, ili, ilcesi, mahadi FROM hemzemin_gecit WHERE km = 0+880
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Есть так много что-то не так с этим. Давайте начнем с:
Вы не используете PDO, вы используете наследие pg_
функции;
Вы используете pg_query
с интерполяцией строк. Бобби говорит привет. Увидеть SQL-инъекция (википедия), SQL-инъекция (PHP);
Вы не цитируете $yerId
как буквальный, например '$yerId'
что вам нужно сделать, чтобы этот запрос работал даже небезопасной
Пожалуйста: использовать PDO, или же по крайней мере pg_query_params
.
В вашем случае вы должны использовать:
rawurlencode()
закодировать URL, и
rawurldecode()
расшифровать его.
При отправке параметров, вы должны URLEкодировать их «» 0 + 880 «должно идти как» 0% 2B880 «, иначе это будет соответствовать URL.
Ссылка для быстрого кодирования / декодирования значений для отладки / тестирования. http://meyerweb.com/eric/tools/dencoder/