Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Php MySql - строковая переменная в условии Select', Php MySql - строковая переменная в услов 
:(
    Опции темы
script4u
Дата 6.11.2014, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Всем привет! Есть проблема со вставкой переменной в условие запроса Select. Есть переменная похожего типа:
Код

$qwhere = "id=2 OR id=3 OR id=4 OR id=7";

И запрос:
Код

$q=mysql_query("SELECT * FROM e1 WHERE status='0' AND ('$qwhere')") or die(mysql_error());

В итоге запрос не работает, ошибок не выдает, просто нулевой результат, причем если вставить строку прямо в запрос(без переменной) все работает. В чем может быть проблема?
Предрекаю вопрос "А зачем?": Заранее неизвестно сколько условий id будет в условии, поэтому пришлось прикрутить костыль - условие собирается чуть выше в виде строки.

PM MAIL   Вверх
_zorn_
Дата 7.11.2014, 02:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



На будущее, если запрос не работает - сделай echo этого запроса.
Твой будет выглядеть вот так.
Код
SELECT * FROM e1 WHERE status='0' AND ('id=2 OR id=3 OR id=4 OR id=7')

Ошибку не видишь ?
PM MAIL   Вверх
igorold
Дата 7.11.2014, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Если бы видел, видимо не обращался бы ... написал бы, чтобы убрал одинарные кавычки вокруг переменной.
Сейчас юзеры не любят мозги напрягать ...
А вообще, я как-то давно читал, что рекомендуется переменные не вставлять внутрь строки, делать типа того:

Код

$q=mysql_query("SELECT * FROM e1 WHERE status='0' AND (".$qwhere.")") or die(mysql_error());


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
_zorn_
Дата 7.11.2014, 07:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(igorold @  7.11.2014,  13:15 Найти цитируемый пост)
что рекомендуется переменные не вставлять внутрь строки, делать типа того

А зачем ? Просто потому что кто то так написал ?
Все же нужно понимать, почему надо делать именно так а не иначе.
Хотя по вашему 
Цитата(igorold @  7.11.2014,  13:15 Найти цитируемый пост)
написал бы, чтобы убрал одинарные кавычки вокруг переменной.

я понял, что про напряг мозгов это вы про себя.

Ваш пример вообще ничем не отличается от оригинала. Если только в визуальном плане.
PM MAIL   Вверх
igorold
Дата 7.11.2014, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



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

В своё время я читал рекомендации про оптимизацию работы ПХП и там как раз это была одна из рекомендаций - убирать переменные из строки.
Почему я про это не написал, чтобы не забивать никому голову (переполнять память) лишней информацией.

Если вы про это не знали, это ваши проблемы и держите своё мнение о незнакомых людях в одном месте и не гоните волну.

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

Этот ответ добавлен с нового Винграда - http://vingrad.com

Это сообщение отредактировал(а) igorold - 7.11.2014, 10:57


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
_zorn_
Дата 7.11.2014, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(igorold @  7.11.2014,  17:48 Найти цитируемый пост)
про оптимизацию работы ПХП

Ну если только сервак работает на калькуляторе...
Цитата(igorold @  7.11.2014,  17:48 Найти цитируемый пост)
Если вы про это не знали

Более того я даже знаю в чем "оптимизация". Только в вашем примере ее нет  smile 
Скорей всего там говорилось что нужно использовать одинарные кавычки вместо двойных - типа строка тогда не будет парсится на наличие переменных.

Цитата(igorold @  7.11.2014,  17:48 Найти цитируемый пост)
чем с понтами изображать намеки

Понты я вижу только у вас. Где то что то прочитал, но преподносите так, как будто так нужно делать.

ИМХО все же нужно дать человеку самому разобраться в чем ошибка.
Типа "Дай человеку рыбу – он будет сыт один день, научи человека ловить рыбу – он будет сыт всю жизнь"
PM MAIL   Вверх
igorold
Дата 7.11.2014, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Цитата(_zorn_ @  7.11.2014,  11:24 Найти цитируемый пост)
Только в вашем примере ее нет


Вы либо невнимательно читаете, либо что-то недопонимаете ...

Добавлено через 3 минуты и 7 секунд
Вот та рекомендация:

Выносите $переменные из "текстовых строк" - ускорение 25-40%

http://php.spb.ru/php/speed.html


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
_zorn_
Дата 7.11.2014, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Как я и думал.
Вы всерьез считаете ЭТО надежным источником ? Может еще статьи за 2000 год в пример приводить.
Ну и верить на слово не комильфо.

Как дела обстоят сейчас - http://ideone.com/YV487c
И это не продакшн сервер.

А теперь сравни с этим и можешь смело слать такие "советы" куда подальше, если не понимаешь что происходит
http://ideone.com/tV0ZY3

И ведь почти ничего не поменялось.

Это сообщение отредактировал(а) _zorn_ - 7.11.2014, 14:31
PM MAIL   Вверх
Gold Dragon
Дата 12.11.2014, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(script4u @  6.11.2014,  19:01 Найти цитируемый пост)
Заранее неизвестно сколько условий id будет в условии, поэтому пришлось прикрутить костыль - условие собирается чуть выше в виде строки.
может проще так
Код

$qwhere = "2,3,4,7";
$q = mysql_query("SELECT * FROM `e1` WHERE `status`='0' AND `id` IN ($qwhere)") or die(mysql_error());

или если неизвестно что и как то даже так
Код

$qwhere = array();
//...................
$qwhere[] = 2;
//...................
$qwhere[] = 3;
//...................
$qwhere[] = 4;
//...................
$qwhere[] = 7;
//..................
$q = mysql_query("SELECT * FROM `e1` WHERE `status`='0' AND `id` IN (" . implode(",", $qwhere) . ")") or die(mysql_error());







--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
igorold
Дата 18.11.2014, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Цитата(_zorn_ @  7.11.2014,  14:20 Найти цитируемый пост)
Как дела обстоят сейчас - http://ideone.com/YV487c
И это не продакшн сервер.

А теперь сравни с этим и можешь смело слать такие "советы" куда подальше, если не понимаешь что происходит
http://ideone.com/tV0ZY3


Спасибо за информацию  smile ... а почему так произошло? ... ведь раньше действительно были такие рекомендации и они работали.


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
LexzCQ
Дата 24.11.2014, 22:10 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.11.2014

Репутация: нет
Всего: нет



Посмотрите в коде html какой тип у кнопки прописан (должен быть submit). 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.