Передача SQL запроса содержащего "%" в качестве параметра

Тема в разделе "PHP", создана пользователем xriby, 15 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    PHP:
    <? //main_all.php
    $search "строка поиска";
    $query "SELECT * FROM table WHERE somedata LIKE '%$search%'";
    ?>
    <a href="main_all_print.php?query=<?php echo $query?>" target="_blank">Версия для печати</a>
    Например, $search = "F86", отправляем main_all_print.php параметр query и скрипт преобразует
    PHP:
    LIKE '%F86%'
    в
    PHP:
    LIKE 'ш6%'
    Как решить проблему, как экранировать %?
     
  2. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    147
    Симпатии:
    110
    Гм=\ странно излагаешь, такое впечатление что ты передаешь sql-запрос прямо в гет...:be:
    пробуй передать так
    main_all_print.php?q=F86
    PHP:
    //в скрипте ловим... 
    $search $_GET['q']; //(не забываем фильтровать все входящие)
    $query "SELECT * FROM table WHERE somedata LIKE '%" $search "%'";
    $sql mysql_query($query);
    //выводим результат.
     
  3. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    Да, передаю полный sql-запрос методом GET.
    Задача в том и стоит, что нужно передать полный sql-запрос ("SELECT * FROM table WHERE somedata LIKE '%F86%'") методом GET.
     
  4. Ins1ne

    Ins1ne Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    89
    Симпатии:
    25
    Зачем вообще может такое понадобиться? В GET ты получаешь что искать и обрабатываешь уже это своим php скриптом , предварительно проверив что тебе передали. А то, о чем ты пишешь это sql-инъекция в чистом виде :)
    http://ru.wikipedia.org/wiki/SQL_%D0%B8%D0%BD%D1%8A%D0%B5%D0%BA%D1%86%D0%B8%D1%8F
     
  5. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    Я не нарк, чтоб самому "себе" инъекции делать. :)
    В main_all.php в зависимости от параметров формируется sql-запрос и выводится результат на сформированный sql-запрос.
    В main_all_print.php я хочу передать уже сформированный sql-запрос для отображения полученных данных в другом (принтерном) виде.
    И все никаких инъекций.
     
  6. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Как вариант сделай набор типовых запросов и передавай например так, main_all_print.php?type=1&search=f6

    Обработчик в main_all_print.php типа такого:
    PHP:
    <?php
    <?php
    $search 
    ''$type '';
    $search $_GET['search'];
    $aTypes = array(
    '1'=>"SELECT * FROM table WHERE somedata LIKE '%" $search "%'\"",
    '2'=>"SELECT * FROM table2 WHERE somedata LIKE '%" $search "%'\"");

    $type array_key_exists((int)$_GET['type'],$aTypes) ? $aTypes[$_GET['type']] : 0;
    if (!
    $type) die('Some error');
    $sql mysql_query($query);
    ?>
    Писал на коленке но думая общая идея должна быть понятна + плюс для параметра $_GET['search'] защиту от SQL inj надо предусмотреть!

    Или как второй вариант, делаешь временную таблицу в которую при выполнение запроса в main_all.php пишешь код SQL запроса, а в main_all_print.php передаешь id строки где хранится нужный запрос, таблицу чистишь по крону.
     
Статус темы:
Закрыта.