san_jorich
@san_jorich
Творческий кодер

Как поправить mysql запрос?

Здравствуйте!
Прошу прощения, если вопрос кому-то покажется несерьезным.. у меня не так много опыта в сложных запросах.. ранее все как-то обходилось SELECT * FROM.. Надеюсь на Ваше снисхождение и понимание

Как бы в запрос добавить medialib.status == "trash"
$result = $add_from_base->query("SELECT medialib.id, medialib.filename, medialib.path,
			medialib.rsc, medialib.status, medialib.date_added, medialib.date_played, medialib.date_artist_played,	medialib.date_title_played,
			medialib.duration,	medialib.artist, medialib.title, medialib.album, medialib.label, medialib.composer,
			medialib.year, medialib.genre, medialib.info, medialib.lyrics, medialib.count_played, medialib.count_requested, medialib.last_requested,
			medialib.start_time, medialib.end_time, medialib.fadein, medialib.fadeout, medialib.speech_out, medialib.speech_in,
			medialib.bpm, medialib.mood, medialib.gender, medialib.rating, medialib.playlimit_count, medialib.playlimit_action,
			category.cat_name from medialib join category on category.id = medialib.catalog");

Вообще, можно ли как-то часть запроса сделать через строковую переменную: например если пришла $_POST['status'] то в переменную $queryStatus прописать medialib.status LIKE $_POST['status'] и далее в query->("SELECT .. , '$queryStatus', ..)
История в запросе из корзины\не из корзины чтоб не плодить сущностей
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@alexalexes
Классика жанра - подставить что-то в секцию запроса where из данных фильтра.
Вы можете изменить запрос в зависимости от входных параметров, но есть один подводный камень.
Вот так делать не надо:
$sql = "select ...
from ...
where 1 = 1
".(isset($_POST['status']) ? ' and medialib.status LIKE '.$_POST['status'] // тут сшили текст запроса и значение параметра (эти два слова нужно подчеркнуть) 
 : "")

Прямая подстановка дает возможность проводить sql инъекции.
Правильно нужно примерно так:
$bind_params = [];
if(isset($_POST['status']))
  $bind_params['status'] = $_POST['status'];
$sql = "select ...
from ...
where 1 = 1
".(isset($bind_params['status']) ? " and medialib.status LIKE :status " // тут сшили текст запроса со специальным маркером (может использоваться знак ? )
 : "")
foreach($bind_params as $bind_param)
{
  // тут привязываем каждое значение параметра с маркером в запросе через функцию bind_param (интерфейс и название функции зависит от библиотеки для соединения с базой данных)
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Пишу сайты для Людей. Не быстро. Дорого. Качественно.

"КАЧЕСТВЕННО", Карл!
Этот человек пишет сайты качественно.
Вот это вот называется у нас "качественно". Добро пожаловать в новую вайти реальность.

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

И еще и имеет наглость брать за это деньги.
Неплохой бизнес, с одних лохов взять денег за работу, а потом к другим с протянутой рукой: "поможите люди добрые, мы сами не местные, у меня не так много опыта... Напишите мне код забесплатно"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы