ФорумРазработкаБазы данных → Кавычки в запросе

Кавычки в запросе

  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2011 г. 3:13

    всем привет

     
    $query="SELECT * FROM customers WHERE customer_name LIKE '%".$search."%' ORDER BY customer_name ASC";


    если $search = "artur's"; то запрос не выполняется.
    сделал такую хрень
     
    $query="SELECT * FROM customers WHERE customer_name LIKE \"%".$search."%\" ORDER BY customer_name ASC";


    заменил ' на \"
    я быдло?

    вообще как бороться с кавычками?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 3:17, спустя 4 минуты 17 секунд

    mysql_real_escape_string
    Спустя 21 сек.
    http://phpfaq.ru/slashes
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2011 г. 3:18, спустя 1 минуту 7 секунд

    Абырвалг, ну я нагуглил mysql_real_escape_string но у меня есть запросы огромные и если везде напихать mysql_real_escape_string смотриться очень неэстэтично. че сделать?
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2011 г. 3:46, спустя 27 минут 34 секунды

    что то я не пойму… использую mysql_real_escape_string он ставит \ перед кавычкой и когда отображаю данные с базы то получаю этот \
    Теперь имя выглядит так - artur\'s
    что я не понял?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 3:50, спустя 3 минуты 52 секунды

  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2011 г. 3:52, спустя 2 минуты 23 секунды

    Абырвалг, я скотина и не прочитал эту статью! пошел убиваться
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 9:33, спустя 5 часов 40 минут 29 секунд

    используй плейсхолдеры, %username%

    $db->query("SELECT * FROM customers WHERE customer_name = ? ORDER BY customer_name ASC", $param);

    впрочем, плейсхолдеры не подходят для like

    mysql_real_escape_string

    совет не годится для лайк

    точнее говоря, после
    $param = mysql_real_escape_string
    нужно сделать
    $param = str_replace(array('%', '_'), array('\\%', '\\_'), $param);
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2011 г. 10:06, спустя 33 минуты 9 секунд

    lol
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 23 февраля 2011 г. 12:17, спустя 2 часа 10 минут 57 секунд

    Плейсхолдеры в goDB подходят для like :)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 13:10, спустя 53 минуты 32 секунды

    master, если уж использовать - то именованные а не анонимны
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 17:30, спустя 4 часа 19 минут 56 секунд

    Плейсхолдеры в goDB подходят для like :)

    используют другой маркер?
    Спустя 24 сек.
    Абырвалг, именованные это какие?
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 17:40, спустя 9 минут 30 секунд

    :foo, :bar. Mysqli искаропки вроде как не поддерживает их


    а ваще нужно так
    i:foo // toInt
    eq:foo // escape + quote
    ij:foo // toInt + implode(',' $data['foo'])

    в том числе и
    i:0, c:1 // это если список а не хеш подставляем
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 20:53, спустя 3 часа 13 минут 27 секунд

    Mysqli искаропки

    о лол, там вообще ржака
    вот например надо выполнить такой запрос

    SELECT FROM WHERE id IN(1,2,100500)

    в своей функции-обёртке это можно сделать так

    query("SELECT FROM WHERE id IN(?)", array(1, 2, 100500));

    как это сделать с плейсхолдерами mysql я вообще не представляю
    Спустя 102 сек.
    Абырвалг, в большинстве случаев хватает обычного эскейпинга и эскейпинга для LIKE
    не всё полезно, что в swap полезло
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 24 февраля 2011 г. 12:58, спустя 16 часов 4 минуты 53 секунды

    используют другой маркер?

    Что? Не понял.

    SELECT * FROM `table` WHERE `name`=? - экранированная строка в кавычках
    SELECT * FROM `table` WHERE `name` LIKE "%?e%" - экранированная без кавычек
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2011 г. 15:36, спустя 2 часа 37 минут 36 секунд

    "%?e%"

    это что такое? что вставляется и что в итоге получается?
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!