Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: mysqli::prepare

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Vaio
Отправлено: 10 Июня, 2013 - 21:57:53
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Подскажите, лучше использовать mysqli::prepare или обычный mysqli::query?
И как я понимаю используя mysqli::prepare уже не нужно экранировать данные, пришедшие от пользователя или все-таки лучше перестраховаться?
 
 Top
OrmaJever Модератор
Отправлено: 10 Июня, 2013 - 22:01:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




лично я mysqli::prepare использую в основном для insert'a и update'a, а селект лучше обычным query. Хотя для кого как.
Да, в prepare не нужно экранизировать, просто передаёте параметры в bind_param и запрос будет безопастным.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Vaio
Отправлено: 10 Июня, 2013 - 22:05:36
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Хочется уже использовать что-то одно, или все через prepare или через query. Я так понимаю вы используете для select`а query из-за проблем со скоростью работы prepare?
 
 Top
OrmaJever Модератор
Отправлено: 10 Июня, 2013 - 22:25:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Vaio пишет:
Хочется уже использовать что-то одно, или все через prepare или через query.

Нет, так врядли получится. Нужно знать зачем нужно то и то, и использовать в нужных местах. Использовать что-то одно конечно можно, но лучше писать так как будет понятнее и короче. В общем всё на вашей совести.
Vaio пишет:
Я так понимаю вы используете для select`а query из-за проблем со скоростью работы prepare?

Нет, я об этом никогда не задумывался, я даже не знаю выполняется ли prepare дольше, и если да то насколько.
Хотел написать "Выбирая php можно не заморачиватся над скоростью выполнения", но это наверное не верно, всётаки сам частенько за неё борюсь, но только не в убыток читаемости кода.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
esterio
Отправлено: 10 Июня, 2013 - 22:27:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




делал тесты лично. Вывод prepare хоть и мендленей, но разница настолько мала, что беспокоится о скорости не стоит.
 
 Top
Vaio
Отправлено: 10 Июня, 2013 - 22:46:29
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Все прелести prepare заключаются в безопасности?
Я в основном использую выборку через select и почти всегда по (int)$id, что в этом случае лучше использовать?
 
 Top
OrmaJever Модератор
Отправлено: 10 Июня, 2013 - 22:58:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Vaio пишет:
Я в основном использую выборку через select и почти всегда по (int)$id, что в этом случае лучше использовать?

Ну я же вам про это и говорил, при выборке в основном используется 1-2 переменые (параметры для условия), которые особо код не загромождают, но при добавлении приходится перечислять много полей и из-за этого запрос становится сложночитаем.
А ещё кстате говоря Prepare хорошо использовать для нескольких запросов в цикле, Реальный пример из кода

PHP:
скопировать код в буфер обмена
  1. $pr = $mysqli->prepare('INSERT INTO `top_clans` (`ally_crest`, `clan_crest`, `clan_name`, `clan_lvl`, `clan_leader`, `own`, `crp`, `players`, `middle_lvl`, `ally`, `date`)
  2.                                                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, (NOW() + INTERVAL 7 HOUR))');
  3.  
  4. for($i=0;$i<50;++$i) {
  5.         $allyCrest = $all[2][$i];
  6.         $clanCrest = $all[4][$i];
  7.         $clanName = $all[6][$i];
  8.         $clanLvL = $all[8][$i];
  9.         $clanLeader = $all[9][$i];
  10.         $own = (!empty($all[11][$i]) ? $all[11][$i].': '.$all[15][$i] : '').(!empty($all[11][$i]) && !empty($all[17][$i]) ? '<br/>' : '').$all[17][$i];
  11.         $crp = $all[19][$i];
  12.         $members = $all[20][$i];
  13.         $middleLvL = $all[21][$i];
  14.         $ally = $all[24][$i];
  15.  
  16.         $pr->bind_param('iisissiiis', $allyCrest, $clanCrest, $clanName, $clanLvL, $clanLeader, $own, $crp, $members, $middleLvL, $ally);
  17.         $pr->execute();
  18. }
  19. $pr->close();
  20. $mysqli->close();


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB