Что я пытаюсь сделать, так это написать запрос, который извлекает все строки, но помещает любой составной первичный ключ, соответствующий определенному значению, в верхнюю часть возвращаемого списка.
Тем не менее, я большой ноль, когда дело доходит до 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);
Где я ошибаюсь?
@potiev как сбежал? есть ли для этого встроенная функция php?
$sql = "SET @url = :host"; $stmt = $connection->prepare($sql); $stmt->execute([':host' => $_SERVER['HTTP_HOST']]);@potiev ааа, большое спасибо, приятель. плохо попробую это прямо сейчас
@potiev теперь говорит мне, что у меня есть синтаксическая ошибка рядом 'table ORDER BY CASE WHEN CONCAT (sld, '.', tld) = @url THEN 0 ELSE 1 END, CONCAT' :(
В вашей базе данных действительно есть таблица с именем table?
@potiev ах, извините, это был долгий день. я просто скопировал это из ответа на другой вопрос и забыл изменить эту часть. спасибо!!
@potiev можно ли совместить утверждения SET и SELECT?
Я думаю, что PDO произойдет сбой, если объединить два разных оператора SQL.
@potiev, нельзя ли их даже объединить, а разделить, то есть "SET @url = :url; SELECT...", а затем выполнить их оба сразу $stmt->execute([":url"=>$_SERVER["HTTP_HOST"]])?
Я думаю, вы не можете комбинировать два запроса разных типов. 1) ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ 2) ВЫБРАТЬ. @set относится к 1 типу
@potiev, я пробовал, и это не сработало. есть ли где-нибудь список, говорящий мне, какие запросы можно и нельзя комбинировать?
Насчет списка не знаю) Вам нужна переменная @url только один раз?
@potiev yah только один раз за следующее утверждение
$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 отлично. это забавно. это именно то, о чем я спрашивал другого парня, который разместил вопрос, и он полностью проигнорировал мой запрос, из-за чего я подумал, что сделать что-то подобное невозможно. очень ценю это, приятель!! <3
Я рад помочь вам
Могу ли я добавить ответ на вопрос?
@потиев конечно!!






Если вы используете переменную @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); возвращает «Неверный номер параметра»?
Вы должны использовать ассоциативный массив $var = [':url' => $_SERVER["HTTP_HOST"]]
$_SERVER['HTTP_HOST']следует экранировать перед назначением