Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

30_PHP, MySQL и безопасность (Дмитрий Котеров)
Goto page Previous  1, 2, 3  Next
Author Message
Петров
Заглянувший



Joined: 27 Nov 2003
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Tue Feb 10, 2004 4:38 pm ()
   Post subject:
Reply with quote

Здравствуйте!

А что если хочется постраничный вывод записей, причем номера страниц приходят из $_GET.

И хочется
Code (php): скопировать код в буфер обмена
$sql=sql_placeholder('
SELECT b.id, b.title
FROM ?#TABLE b
LIMIT ?,?'
,$page_offset,$on_page);
Я так понимаю, что на выходе всегда будут числа в кавычках ... LIMIT '0','1' и никак это не исправить, кроме как вставкой переменных "вручную"?
Или есть простой способ вставлять переменные без кавычек?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Feb 10, 2004 5:10 pm (спустя 31 минуту)
   Post subject:
Reply with quote

В принципе, можно добавить код в библиотеку, который будет проверять: если значение состоит из одних только цифр, то выводить его без всяких кавычек. Это совсем несложно сделать.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Sat Jun 19, 2004 12:05 am (спустя 4 месяца 8 дней 6 часов 54 минуты)
   Post subject:
Reply with quote

Просто спасибо за PlaceHolder =)
Back to top
View user's profile Send private message
phpBB
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Aug 03, 2004 2:13 pm (спустя 1 месяц 14 дней 14 часов 7 минут)
   Post subject: :|
Reply with quote

Quote:
Значение переменной $topic_id предположительно приходит из формы или из QUERY_STRING, верно? Там должно быть целое число. Но вот пришел хакер и запустил скрипт так:
script.php?topic_id=1'+OR+1!='

В результате запрос превратится в такой:

DELETE FROM phpbb_topics
WHERE topic_id = '1' OR 1!=''
OR topic_moved_id = '1' OR 1!=''

Как видите, при выполнении это очистит всю таблицу в базе данных!
Осолютно не правильно. в phpBB есть такие строки(файл common.php):
Code (php): скопировать код в буфер обмена
if( !get_magic_quotes_gpc (www.php.net/get_magic_quotes_gpc)() )
{
        if( is_array (www.php.net/is_array)($HTTP_GET_VARS) )
        {
                while( list($k, $v) = each (www.php.net/each)($HTTP_GET_VARS) )
                {
                        if( is_array (www.php.net/is_array)($HTTP_GET_VARS[$k]) )
                        {
                                while( list($k2, $v2) = each (www.php.net/each)($HTTP_GET_VARS[$k]) )
                                {
                                        $HTTP_GET_VARS[$k][$k2] = addslashes (www.php.net/addslashes)($v2);
                                }
                                @reset (www.php.net/reset)($HTTP_GET_VARS[$k]);
                        }
                        else
                        {
                                $HTTP_GET_VARS[$k] = addslashes (www.php.net/addslashes)($v);
                        }
                }
                @reset (www.php.net/reset)($HTTP_GET_VARS);
        }

        if( is_array (www.php.net/is_array)($HTTP_POST_VARS) )
        {
                while( list($k, $v) = each (www.php.net/each)($HTTP_POST_VARS) )
                {
                        if( is_array (www.php.net/is_array)($HTTP_POST_VARS[$k]) )
                        {
                                while( list($k2, $v2) = each (www.php.net/each)($HTTP_POST_VARS[$k]) )
                                {
                                        $HTTP_POST_VARS[$k][$k2] = addslashes (www.php.net/addslashes)($v2);
                                }
                                @reset (www.php.net/reset)($HTTP_POST_VARS[$k]);
                        }
                        else
                        {
                                $HTTP_POST_VARS[$k] = addslashes (www.php.net/addslashes)($v);
                        }
                }
                @reset (www.php.net/reset)($HTTP_POST_VARS);
        }

        if( is_array (www.php.net/is_array)($HTTP_COOKIE_VARS) )
        {
                while( list($k, $v) = each (www.php.net/each)($HTTP_COOKIE_VARS) )
                {
                        if( is_array (www.php.net/is_array)($HTTP_COOKIE_VARS[$k]) )
                        {
                                while( list($k2, $v2) = each (www.php.net/each)($HTTP_COOKIE_VARS[$k]) )
                                {
                                        $HTTP_COOKIE_VARS[$k][$k2] = addslashes (www.php.net/addslashes)($v2);
                                }
                                @reset (www.php.net/reset)($HTTP_COOKIE_VARS[$k]);
                        }
                        else
                        {
                                $HTTP_COOKIE_VARS[$k] = addslashes (www.php.net/addslashes)($v);
                        }
                }
                @reset (www.php.net/reset)($HTTP_COOKIE_VARS);
        }
}
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Tue Aug 03, 2004 2:52 pm (спустя 39 минут)
   Post subject:
Reply with quote

phpBB wrote:
Осолютно не правильно. в phpBB есть такие строки
Вы б хоть версию phpBB указали -- и посмотрели, когда процитированные Вами строки писались.

to ДК: -- тоже самое, наверное: надо бы версии программ указывать "во избежание..."
Back to top
View user's profile Send private message
phpBB
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Aug 04, 2004 12:04 am (спустя 9 часов 11 минут)
   Post subject:
Reply with quote

baev: это есть начиная с версии 2.0.0. Существенные изменения проиходят только в ветке 2.0.x.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Aug 04, 2004 1:00 am (спустя 56 минут)
   Post subject:
Reply with quote

Да не важна версия. Важен сам принцип.
Back to top
View user's profile Send private message Send e-mail
Andrey Stolbovsky
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Aug 16, 2004 6:07 am (спустя 12 дней 5 часов 6 минут)
   Post subject:
Reply with quote

Добрый день.

Я что-то не понимаю в работе placeholder. Делаю следующее: $sql = sql_placeholder("SELECT * FROM a WHERE f1 < ? AND f2 < ? AND f3 = ? AND f4 = '?'", $date1, $date1, $date2, '0'), вследствие чего во все ? последовательно подставляются по одному символу из $date1 (а не три даты в первые три и 0 в кавычках в последнем плейсхолдере). Так и нужно?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Aug 25, 2004 1:59 am (спустя 8 дней 19 часов 51 минуту)
   Post subject:
Reply with quote

Что-то Вы не то делаете. Вот тестовый скрипт:
Code (php): скопировать код в буфер обмена
<?php
require_once "lib/Database/Placeholder.php";
$date1 = "abcd";
$date2 = "efgh";
$sql = sql_placeholder("SELECT * FROM a WHERE f1 < ? AND f2 < ? AND f3 = ? AND f4 = '?'", $date1, $date1, $date2, '0');
echo (www.php.net/echo) $sql;
?>
Кстати, новую версию библиотеки можно скачать на старом месте (я там поправил кое-что: в случае, если шло обращение '?' (с апострофами), то второй апостроф после "?" трактовался как имя именованного placeholder-а, что, вообще говоря, несколько неожиданно). Результат работы данного кода:
Code (any language): скопировать код в буфер обмена
SELECT * FROM a WHERE f1 < 'abcd' AND f2 < 'abcd' AND f3 = 'efgh' AND f4 = '0'
Кроме того, обратите внимание, что запись " ... '?' ... " неверна: не нужно обрамлять "?" апострофами, это и так происходит автоматически.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Tue Aug 31, 2004 4:36 pm (спустя 6 дней 14 часов 37 минут)
   Post subject:
Reply with quote

Читаю новый php_inside...
Оказалось, что placeholder'ы есть в php_mysqli при объектно-ориентированном подходе...
Вот пример:
Code (php): скопировать код в буфер обмена
//...

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent); //'sssd' указывает на типы переменных, т.е.
                                                                  //string $code, string $language, string $official, double $percent

$stmt->execute();

//...
 
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Aug 31, 2004 8:28 pm (спустя 3 часа 52 минуты)
   Post subject:
Reply with quote

Конечно. Только они там несколько неудобные (хотя обертку ничего не стоит написать, конечно).
Кстати, не знаете, можно ли mysqli применять доя работы с MySQL3, а не с MySQL4?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Sep 01, 2004 11:33 am (спустя 15 часов 4 минуты)
   Post subject:
Reply with quote

PHPinside wrote:
ext/mysql - старое расширение PHP для работы с MySQL. Не поддерживает всех возможностей MySQL версий 4.1 и выше.

ext/mysqli - новое расширение PHP 5 для работы с MySQL. Поддерживает возможности MySQL версий от 3.22 до 5.0
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Sep 01, 2004 12:51 pm (спустя 1 час 17 минут)
   Post subject:
Reply with quote

Черт. Надо было его в книге тогда описать, что ли... Хотя, с другой стороны, совместимость с PHP4 - тоже важная штука.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Sep 06, 2004 7:59 pm (спустя 5 дней 7 часов 8 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «мусор отделен»,
расположенную в форуме Мусоропровод (06 Сентября 2004, 20:59).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Sep 06, 2004 8:00 pm (спустя 39 секунд)
   Post subject:
Reply with quote

Найден баг в Placeholder.php при работе с константами, содержащими подчерки. Исправлен. Новая версия - на старом месте.
Back to top
View user's profile Send private message Send e-mail
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Fri Dec 17, 2004 5:36 pm (спустя 3 месяца 10 дней 21 час 35 минут; написано за 1 минуту 47 секунд)
   Post subject:
Reply with quote

Дмитрий,

Меня интересует, насколько правомерно использование этой библиотеки?
Я хотел бы попросить Вас, поместить в файл Ваш копирайт и условия распространения.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Dec 18, 2004 1:51 am (спустя 8 часов 15 минут; написано за 21 секунду)
   Post subject:
Reply with quote

Все - свободное. Только ссылку на автора желательно сохранить.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jan 03, 2005 7:24 pm (спустя 16 дней 17 часов 33 минуты; написано за 8 секунд)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Никакого отношения к теме не имеет.»,
расположенную в форуме Лень сходить в Поиск (03 Января 2005, 19:24).
Back to top
View user's profile Send private message Send e-mail
Прохожий
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Jan 19, 2005 12:18 am (спустя 15 дней 4 часа 53 минуты)
   Post subject: Скорость выполнения запроса
Reply with quote

Хех, а статья-то, оказывается, старая, а в phpInside совсем недавно появилась... вот ведь.
ну да ладно. не о том я.
я провел простейшее тестирование этого метода на скорость. Использовался простейший запрос:
Code (php): скопировать код в буфер обмена
...('insert into map (x,y) values (?,?)',$x,$y)
тестирование проводилось на оч. слабом компе, но, думаю, что пропорции должны сохраниться в любом случае...
Так вот, за положенные 30 секунд:
mysql_qw успел вставить 10 779 строк
sql_placeholder_ex - 10 074
стандартный mysql_query - 28 088

Разница - почти в 3 раза. Стоит оно того?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Jan 19, 2005 1:33 am (спустя 1 час 15 минут; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

Меряете Вы неправильно. Считайте не в процентах, а абсолютный расход времени. А потом этот абсолютный расход сравните с общим временем работы конкретного скрипта. Получите доли процента.

В скриптах редко когда выполняется больше 50-60 SQL-запросов за раз. Соответственно, "убыстрение почти в 3 раза" превратится в пыль.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri Feb 18, 2005 6:21 pm (спустя 30 дней 16 часов 47 минут)
   Post subject:
Reply with quote

Quote:
j.Fog писал(а):
1. заменить переводы строк на BR
2. trim
3. htmlspecialchars
4. расстановка "правильных" кавычек
5. Парсинг bb-кода.
6....
Убыть мало, да...

Я когда в то место, где сейчас работаю пришел..... Если бы Вы знали, какими матами я вспоминал того программера, который был здесь до меня...Я его убить готов был. Именно за выполение из перечисленных здесь пунктов, вполненный ПЕРЕД добавлением в базу.
За выполнение ЛЮБОГО из них.

Fog:
Мало того - Вы, ради интереса сравните нагрузку от работы с базой для генерации страницы, с нагрузкой на обработку.... Просто сравните
А можно узнать, как Вы делаете. Просто в сети валом всякого бутора, дающие новичкам не верные азы (статьи типа “РНР это очень просто”, или “Гостевая за 15 минут”, или “Форум за 10 минут”, или “Супер портал на 5 минут” …) именно в этом большинстве и предлагается подход описанный j.Fog-ом. Я конечно, понимаю, что лень много писать, но может же кто-то рассказать хотя бы о самом принципе подхода.
Заранее благодарен.
З.Ы. Прошу прощения за оффтоп, но мне кажется, что заводить новую тему пока будет не совсем верно…
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Apr 11, 2005 2:33 pm (спустя 1 месяц 20 дней 20 часов 12 минут; написано за 1 минуту 28 секунд)
   Post subject:
Reply with quote

Вопрос касательно самого placeHolder.
если запрос типа WHERE fio like '?%', то как я понимаю - будет искаться массив?
может быть TODO?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Apr 11, 2005 3:22 pm (спустя 49 минут; написано за 55 секунд)
   Post subject:
Reply with quote

Гость wrote:
WHERE fio like '?%'
Нельзя так писать. Надо так:
Code (php): скопировать код в буфер обмена
sql_placeholder('... WHERE fio like ?', "{$string}%");
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Apr 11, 2005 4:02 pm (спустя 40 минут; написано за 8 секунд)
   Post subject:
Reply with quote

ok.
thnks
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Apr 25, 2005 6:04 pm (спустя 14 дней 2 часа 1 минуту; написано за 2 минуты 48 секунд)
   Post subject:
Reply with quote

а как бороться с \r\n?
с исходником библиотеки не разбирался, так как тока начинаю изучать пхп, просто в лоб взял и поменял:
                  $c=preg_replace('/\r/','\r',$c);
                  $c=preg_replace('/\n/','\n',$c);
потом после замены через sql_placeholder получается что в базе лежит \r\n, хотя мне нужно чтоб там были переводы строк.

спасибо.
может это TODO:?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Apr 25, 2005 11:28 pm (спустя 5 часов 24 минуты; написано за 19 секунд)
   Post subject:
Reply with quote

Это не в TODO, это в RTFM!
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Tue Apr 26, 2005 9:03 am (спустя 9 часов 34 минуты; написано за 1 минуту 9 секунд)
   Post subject:
Reply with quote

не могу найти.
искал в тексте модуля по \r и \n, не нашел.

где искать не подскажите?

пока решил что после делать замену \\n на \n
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Apr 26, 2005 10:23 am (спустя 1 час 20 минут; написано за 28 секунд)
   Post subject:
Reply with quote

Да ёлки, не надо ничего заменять! Как приходят данные, так их и вставляйте. Вы плохо наблу читали, видимо, и ничего из нее не поняли.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Tue Apr 26, 2005 10:53 am (спустя 29 минут; написано за 1 минуту 12 секунд)
   Post subject:
Reply with quote

точно.
переводы строк оказывается нормальное явление в sql
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Jul 30, 2005 7:32 pm (спустя 3 месяца 4 дня 8 часов 38 минут)
   Post subject:
Reply with quote


М

Перенесено из форума: Наблы :: Куроводство.
Перенесено в форум: Конструктор.
Back to top
View user's profile Send private message Send e-mail
Путник
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Aug 18, 2005 7:54 pm (спустя 19 дней 21 минуту; написано за 6 минут 22 секунды)
   Post subject:
Reply with quote

Борясь с грядущими хакерами, переписал код, используя Database_Placeholder 2.20. Но, к своему глубокому удивлению обнаружил, что при включенной в php.ini magic_quotes_gpc = On, слэши "размножаются ничуть не хуже, чем в примере про cat's. Кто виноват и что делать? В коде библиотеки я не обнаружил проверку на magic_quotes... Что делать, если я не знаю, будут ли включены magic_quotes или нет?

Кстати, вот еще одно решение - SafeSQL www.phpinsider.com/php/code/SafeSQL/. Хотя оно показалось мне более громоздким, там есть некоторые интересные идеи.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Aug 19, 2005 9:42 am (спустя 13 часов 48 минут; написано за 17 секунд)
   Post subject:
Reply with quote

Читайте лучше статью. Я думаю, Вы просто не до конца поняли, о чем там речь.
Back to top
View user's profile Send private message Send e-mail
Путник
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Aug 19, 2005 10:23 am (спустя 40 минут; написано за 5 минут 28 секунд)
   Post subject:
Reply with quote

Да, перечитав статью еще раз, нашел фразу:
Quote:
Естественно, нечего и говорить, что данное «лекарство» совершенно несовместимо с magic_quotes_gpc (равно как несовместимо с последним и программирование вообще), поэтому опцию надо бы отключить.
Поэтому мое предыдущее сообщение можно смело снимать с повестки дня.
Но, в качестве пожелания, особенно, если вы говорите: "Я уже неоднократно писал, что в программировании, в отличие от всего остального, иногда бывают беспроигрышные решения.", хотелось бы иметь проверку на magic_quotes_gpc :-).
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Aug 19, 2005 11:34 am (спустя 1 час 11 минут; написано за 41 секунду)
   Post subject:
Reply with quote

Да ну блин же уже!
Ну не имеет magic_quotes_gpc никакого отношения к placeholder-ам! Не имеет! Прочитайте статью внимательно, пожалуйста.
Back to top
View user's profile Send private message Send e-mail
Greenisha
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Nov 08, 2005 2:36 pm (спустя 2 месяца 20 дней 3 часа 1 минуту; написано за 1 минуту 6 секунд)
   Post subject:
Reply with quote

Дмитрий, хотелось бы задать глупый вопрос- почему в Вашем скрипте используется функция addslashes а не mysql_escape_string
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Nov 08, 2005 11:12 pm (спустя 8 часов 35 минут; написано за 19 секунд)
   Post subject:
Reply with quote

Потому что БД бывают разные, на MySQL свет клином не сошелся.
Back to top
View user's profile Send private message Send e-mail
Greenisha
Заглянувший



Joined: 08 Nov 2005
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Wed Nov 09, 2005 1:27 pm (спустя 14 часов 15 минут; написано за 41 секунду)
   Post subject:
Reply with quote

Тогда имеет смысл статью назвать PHP, SQL и безопасность ^_^
Back to top
View user's profile Send private message
docker
Заглянувший



Joined: 05 Nov 2003
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Wed Nov 16, 2005 9:57 pm (спустя 7 дней 8 часов 30 минут; написано за 6 минут 53 секунды)
   Post subject: А что насчет двойного прослешивания в операторе like?
Reply with quote

phpfaq.ru/slashes
раздел Особенности работы с оператором LIKE:
"...Совершенно отдельный случай - оператор LIKE.
Во-первых, помимо обычного прослешивания, в переменных, которые подставляются в LIKE, надо удваивать слеши. То есть, если в переменной содержится символ \, то его надо удвоить, а после этого выполнить обычное прослешивание, через mysql_real_escape_string..."

Т.е. единый слеш \ должен преобразовывать в 4: \\\\
Если это верно как там пишут, то like запросы с вашими плейсхолдерами(они только удваивают), надо примерно вот так писать (+еще учитывать, что знаки % и _ слешить нужно)
Code (php): скопировать код в буфер обмена
$likeval = addCslashes (www.php.net/addcslashes)(str_replace (www.php.net/str_replace)('\\','\\\\',$likeval), '_%');

$r = some_query_func('select * from `user` where `user` like ?', "_{$likeval}%")
Подтверждаете?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Nov 17, 2005 5:03 pm (спустя 19 часов 5 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Сдается мне, что Вы не понимаете, о чем пишете.
Вот когда в реальности столкнетесь с необходимостью работы LIKE, все вопросы сами отпадут.
Говорю заранее: LIKE и placeholder-ы не имеют друг к другу никакого отношения, вообще.
Back to top
View user's profile Send private message Send e-mail
docker
Заглянувший



Joined: 05 Nov 2003
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Thu Nov 17, 2005 6:03 pm (спустя 1 час 3 секунды; написано за 18 минут 24 секунды)
   Post subject:
Reply with quote

все, разобрался.
Просто перед помещением значения в плейсхолдер, который в like идет, проэскейпить нужно вдвойне, а для этого достаточно перед прейсходлером к переменной addcslashes($v, '%_\\') сделать, т.е. примерно так:
Code (php): скопировать код в буфер обмена
$squery = addcslashes (www.php.net/addcslashes)($squery, '%_\\');
sql_placeholder('... WHERE field like ?', "%{$squery}%");
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML