За последние 24 часа нас посетили 18803 программиста и 1708 роботов. Сейчас ищут 868 программистов ...

MYSQL(i) иньекция и вопрос по БД

Тема в разделе "PHP для новичков", создана пользователем greenbanan, 11 июл 2013.

  1. greenbanan

    greenbanan Активный пользователь

    С нами с:
    21 июн 2011
    Сообщения:
    33
    Симпатии:
    0
    Приветствую Вас.

    У меня два вопроса.
    1) Защитит ли следующий код от иньекций в полной мере? Не нужно ли использовать mysqli_real_escape_string?
    Код (Text):
    1. $link = mysqli_connect("localhost", "root", "", "like");
    2.     $query = mysqli_prepare($link, "SELECT * FROM users WHERE token=?;");
    3.     mysqli_stmt_bind_param($query, "s", $_GET["id"]);
    4.     mysqli_stmt_execute($query);
    5.     $result = mysqli_stmt_get_result($query);
    6.     while ($row = mysqli_fetch_assoc($result))
    7.         $res[] = $row;
    8.     print_r($res);
    И вопрос по типам функции mysqli_stmt_bind_param:
    i-integer
    d-double
    s-string
    b-подскажите?
    Есть ли еще типы?
    Где можно отловить то, что валидация не прошла, или запрос проходит в любом случае? ($row==NULL)?

    2) MYSQL слишком ли вредно для производительности то, что для каждого нового запроса, создается отдельное подключение, или стоит использовать одно?

    Спасибо.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    дополнительный escape не нужен

    типы описаны в документации :), например здесь

    зачем тебе новое подключение? думаю где-то в пределах от "очень плохо" до "чудовищно плохо"
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Но причем тут много подключений и запросы?
    Задайте себе вопрос для чего делается подключение и получите ответ.
     
  4. greenbanan

    greenbanan Активный пользователь

    С нами с:
    21 июн 2011
    Сообщения:
    33
    Симпатии:
    0
    Если вам так интересно, то я редактирую скрипт, в котором для каждого нового запроса создается отдельное подключение, и после обработки данных оно закрывается. И я в связи с этим спрашивал, это сильно влияет на производительность или нет? Нужно ли сделать так, чтобы все запросы выполнялись в одном подключении или это не так важно.

    Подключение делается для того, чтобы инициализировать (установить) соединение с базой данных, в рамках одного подключения можно выполнять несколько запросов.
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Соединения делаются для того, чтобы установить связь с базой данных и к ней выполнять запросы.
    Зачем делать много соединения к одной базе данных при каждом запросе я не понимаю.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нездорово звучит
     
  7. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    На аяксе количество запросов равно количеству соединений и никто не париться. Слабый блейд - купи мощнее. Не хватает мощности - добавиь. Чоткие поцаны имеют такого рода дейтацентры http://www.wired.com/wiredenterprise/wp-content/uploads//20 ... _large.jpg

    Добавлено спустя 3 минуты 5 секунд:
    Измерения проводили, или на глаз определили - чота производительности не хватает. :)

    Сделайте из разрозненных функций класс в котором mysqli будет держать соединение пока скрипт не умрет.

    Добавлено спустя 3 минуты 8 секунд:
    Насколько я понимаю "соединение" это указатель в неком файле или в памяти на некий файл или место в памяти компа. Или на самом деле мужики тащут проволоку от mysqli_connect до database?

    Добавлено спустя 2 минуты 35 секунд:
    О впрыске забыл. Не злите окружающих и не придется испытывать на себе всю эту тряхомудию.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    На аяксе другого выхода нет и то есть способы. А ты зачем такое удумал?
     
  9. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Зачем изыскивать способы, если и без рытья все работает?

    "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up ..." (c) сами знаете кто
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Много соединений=много баз.
    1 соединение=много запросов.
    Бред:
    1 соединение=1 запрос.
    2 соединение=1 запрос.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    так таки и никто?

    взрывной рост нагрузки приводит к изобретению кеша или к смене концепции. иначе п-ц неизбежен, ящитаю.
     
  12. greenbanan

    greenbanan Активный пользователь

    С нами с:
    21 июн 2011
    Сообщения:
    33
    Симпатии:
    0
    Спасибо за ответы.