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 :: Как писать переменную в запросе

 PHP.SU

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


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

> Без описания
Монстр_11111
Отправлено: 15 Ноября, 2009 - 19:44:25
Post Id



Частый гость


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


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




Как использовать переменную (из ассоциативного массива) в запросе .
Например .. допустим $_COOKIE['test'] в запросе выдаст синтаксическую ошибку . писать перед запросом $test = $_COOKIE['test'] ; немного не правильно)
 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2009 - 19:58:43
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Конкатенация строк.
PHP:
скопировать код в буфер обмена
  1. mysql_query("select pole from table where id=".mysql_real_escape_string($_COOKIE['test']));


-----
PostgreSQL DBA
 
 Top
CenapaTop
Отправлено: 15 Ноября, 2009 - 20:00:03
Post Id



Частый гость


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


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




$test = $_COOKIE['test'] ;
так и надо писать, а ещё профильтровать пришедшие cookie.
 
 Top
Монстр_11111
Отправлено: 15 Ноября, 2009 - 20:24:45
Post Id



Частый гость


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


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




Ну зачем писать такое словосочетание как "Конкатенация строк" , это же тупо "экранирование" .
Ценапа топ , конечно фильтрую.
Ну..ладно. Тему можно крыть.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2009 - 20:49:52
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Экранирование - это mysql_real_escape_string.
А ваш вопрос - рядом. Переменная - не часть строки, а присоединяется к ней конкатенацией.


-----
PostgreSQL DBA
 
 Top
Монстр_11111
Отправлено: 15 Ноября, 2009 - 21:08:58
Post Id



Частый гость


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


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




Такс , первое - можно на "ты" обращаться ко мне .
Ты , мелкий , пишешь что mysql_real_escape_string это экранирование, ну правильно ,это так и есть .
Но ты же в своем примере пишешь через mysql_real_escape_string .Вот и все .Значит твой пример это экранирование.

( Википедия - что такое Конкатена́ция (сцепле́ние) — операция склеивания объектов линейной структуры, обычно строк. Например, конкатенация слов «микро» и «мир» даст слово «микромир». )
 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2009 - 21:25:22
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Ладно, выкинем экранирование.
Вот - прямая конкатенация 2 строк в запросе. Никаких синтаксических ошибок.
PHP:
скопировать код в буфер обмена
  1. mysql_query("select pole from table where id=" . $_COOKIE['test']);


-----
PostgreSQL DBA
 
 Top
Монстр_11111
Отправлено: 15 Ноября, 2009 - 21:42:21
Post Id



Частый гость


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


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




Мне не нужна конкатенация (соединение двух строк) вообще)
И даже если ее использовать , выйдет синтаксическая ошибка .

Т.е. Как делал я раньше ( присваивал $test = $_COOKIE['test'] ; ) это верный метод
 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2009 - 22:01:20
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Монстр_11111, а с начала? Что пытаешься сделать? Запрос к базе?

Как раз-таки конкатенация для запроса - верный способ, а использование переменный в строке ("что-то=$test") - снижает производительность скрипта.
Никаких синтаксических ошибок нет, если правильно применять, в том числе кавычки.

(Отредактировано автором: 15 Ноября, 2009 - 22:02:47)



-----
PostgreSQL DBA
 
 Top
Монстр_11111
Отправлено: 15 Ноября, 2009 - 22:02:08
Post Id



Частый гость


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


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




Сделал . Вот рабочий пример через соединение строк



PHP:
скопировать код в буфер обмена
  1. $zapros = mysql_fetch_row(mysql_query("select `test_table` from `test` where `id`='1' AND `test`='".$_COOKIE['test']."' limit 1 ;"));


Мелкий , молодец . CenapaTop , век живи, век учись редиска


Теперь тему можно крыть)
 
 Top
Viper
Отправлено: 16 Ноября, 2009 - 07:56:47
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




писать в запросе глобальные переменные без предварительной обработки по крайней мере дыряво.

Мелкий пишет:
а использование переменный в строке ("что-то=$test"Подмигивание - снижает производительность скрипта.

это с какого перепугу ?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Мелкий Супермодератор
Отправлено: 16 Ноября, 2009 - 14:19:45
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Viper пишет:
это с какого перепугу ?

На opennet.ru заметку эту найти не смог, так что только что поставленный тест:
Выборка делалась по 5 раз, среднее значение:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $st = microtime(1);
  3. $s = '';
  4. for ($a=0; $a<9999999;$a++)
  5.         $s .= "$a";
  6. echo microtime(1)-$st;
  7. ?>
  8.  

~10мс
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $st = microtime(1);
  4. $s = '';
  5. for ($a=0; $a<9999999;$a++)
  6.         $s .= $a;
  7. echo microtime(1)-$st;
  8. ?>
  9.  

~7.7мс


-----
PostgreSQL DBA
 
 Top
Ch_chov
Отправлено: 16 Ноября, 2009 - 14:39:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Выносите $переменные из "текстовых строк" - ускорение 25-40%
(Добавление)
Хотя это всё равно нано-оптимизация (имхо). Да и сами тесты там весьма приблизительные.
 
 Top
Мелкий Супермодератор
Отправлено: 16 Ноября, 2009 - 14:53:24
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Ch_chov пишет:
Хотя это всё равно нано-оптимизация (имхо). Да и сами тесты там весьма приблизительные.

А вот из таких мелочей складываются весьма немалые затраты потом. Куда лучше сразу писать оптимально.

PS: спасибо за ссылку, она так близко оказалась Улыбка

(Отредактировано автором: 16 Ноября, 2009 - 14:54:33)



-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB