УСТАНОВИТЬ, а затем ВЫБРАТЬ ЗАКАЗАТЬ ПО СЛУЧАЮ

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

Тем не менее, я большой ноль, когда дело доходит до MySQL и PHP. На самом деле это первый раз, когда я пытался использовать SET и выполнять запросы, отличные от SELECT FROM WHERE ORDER BY или INSERT INTO WHERE.

Я пробовал следующий код, но получаю фатальную ошибку с надписью SQLSTATE[42S02]: Base table or view not found: 1109 Unknown table, которая, как мне кажется, как-то связана с первым оператором execute. Я никогда раньше не использовал SET переменную, поэтому я в растерянности...

include "includes/connect_to_database.php";

$sql = "SET @url = " . $_SERVER['HTTP_HOST'];
$stmt = $connection->prepare($sql);
$stmt->execute();

$sql = "SELECT sld, tld, ask, floor FROM table ORDER BY CASE WHEN CONCAT (sld, '.', tld) = @url THEN 0 ELSE 1 END, CONCAT (sld, '.', tld)";
$stmt = $connection->prepare($sql);
$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

Где я ошибаюсь?

$_SERVER['HTTP_HOST'] следует экранировать перед назначением
potiev 27.07.2019 07:08

@potiev как сбежал? есть ли для этого встроенная функция php?

oldboy 27.07.2019 07:10
$sql = "SET @url = :host"; $stmt = $connection->prepare($sql); $stmt->execute([':host' => $_SERVER['HTTP_HOST']]);
potiev 27.07.2019 07:12

@potiev ааа, большое спасибо, приятель. плохо попробую это прямо сейчас

oldboy 27.07.2019 07:14

@potiev теперь говорит мне, что у меня есть синтаксическая ошибка рядом 'table ORDER BY CASE WHEN CONCAT (sld, '.', tld) = @url THEN 0 ELSE 1 END, CONCAT' :(

oldboy 27.07.2019 07:16

В вашей базе данных действительно есть таблица с именем table?

potiev 27.07.2019 07:17

@potiev ах, извините, это был долгий день. я просто скопировал это из ответа на другой вопрос и забыл изменить эту часть. спасибо!!

oldboy 27.07.2019 07:19

@potiev можно ли совместить утверждения SET и SELECT?

oldboy 27.07.2019 07:23

Я думаю, что PDO произойдет сбой, если объединить два разных оператора SQL.

potiev 27.07.2019 07:27

@potiev, нельзя ли их даже объединить, а разделить, то есть "SET @url = :url; SELECT...", а затем выполнить их оба сразу $stmt->execute([":url"=>$_SERVER["HTTP_HOST"]])?

oldboy 27.07.2019 07:32

Я думаю, вы не можете комбинировать два запроса разных типов. 1) ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ 2) ВЫБРАТЬ. @set относится к 1 типу

potiev 27.07.2019 07:37

@potiev, я пробовал, и это не сработало. есть ли где-нибудь список, говорящий мне, какие запросы можно и нельзя комбинировать?

oldboy 27.07.2019 07:43

Насчет списка не знаю) Вам нужна переменная @url только один раз?

potiev 27.07.2019 07:48

@potiev yah только один раз за следующее утверждение

oldboy 27.07.2019 07:49
$sql = "SELECT sld, tld, ask, floor FROM table ORDER BY CASE WHEN CONCAT (sld, '.', tld) = :host THEN 0 ELSE 1 END, CONCAT (sld, '.', tld)"; $stmt = $connection->prepare($sql); $stmt->execute([':host' => $_SERVER['HTTP_HOST']]);
potiev 27.07.2019 07:51

@potiev отлично. это забавно. это именно то, о чем я спрашивал другого парня, который разместил вопрос, и он полностью проигнорировал мой запрос, из-за чего я подумал, что сделать что-то подобное невозможно. очень ценю это, приятель!! <3

oldboy 27.07.2019 07:54

Я рад помочь вам

potiev 27.07.2019 07:57

Могу ли я добавить ответ на вопрос?

potiev 27.07.2019 08:00

@потиев конечно!!

oldboy 27.07.2019 08:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
19
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете переменную @url сразу, вы можете сделать это так

include "includes/connect_to_database.php";

$sql = "SELECT sld, tld, ask, floor FROM table ORDER BY CASE WHEN CONCAT (sld, '.', tld) = :host THEN 0 ELSE 1 END, CONCAT (sld, '.', tld)";
$stmt = $connection->prepare($sql);
$stmt->execute([':host' => $_SERVER['HTTP_HOST']]);

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

есть идеи, почему $var = [":url", $_SERVER["HTTP_HOST"]]; $pdo->execute($var); возвращает «Неверный номер параметра»?

oldboy 27.07.2019 08:23

Вы должны использовать ассоциативный массив $var = [':url' => $_SERVER["HTTP_HOST"]]

potiev 27.07.2019 08:31

Другие вопросы по теме