Извиняюсь за вопрос новичка.
На моем сайте есть форма.
<form action='' method='get'>
<select id = "cSelector" name = "cSelector">
<option value = ""></option>
<option value = "">Show All Items</option>
<option value = "Compensation">Compensation</option>
</select>
<input type = "submit" value = "Submit">
</form>
Моя строка запроса, созданная при отправке формы, выглядит так:
http://website.com/table_example.php?cSelector=Compensation
Мой запрос выглядит так:
$stmt = $conn->prepare("
SELECT t1.CategoryID,t1.SubCategoryName, t1.CategoryName, t1.SubCategoryID, t2.ItemText from
(SELECT Category.CategoryID,CategoryName, SubCategoryName, SubCategoryID
FROM Category
JOIN SubCategory
ON Category.CategoryID = SubCategory.CategoryID) t1
RIGHT JOIN
(SELECT SubCategoryID, ItemText FROM Item) t2
ON (t1.SubCategoryID = t2.SubCategoryID)
WHERE 1 ".$searchQuery." AND CategoryName = ".$search2." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT :limit,:offset");
Предполагаемый результат создает таблицу, запрошенную CategoryName.
Мой вопрос. Почему это правильно выполняется?
$search2='Compensation';
А этого нет?
$search2 = "'".$_GET['cSelector']."'";
Любая помощь будет очень высоко ценится. И благодарю вас!
Кроме того, это не связано с вашим вопросом, но вы должны использовать параметры запроса. Это намного проще и безопаснее, чем вся эта кавычка-кавычки-точка-переменная-точка-кавычка-без кавычек. Сделайте себе одолжение и уменьшите количество ошибок и нагрузку на глаза! Используйте параметры запроса!
Кроме того, это защитит вас от SQL-инъекций.
@ dazed-and-confused и @ Bill-Karwin также изучаю подготовленные запросы. Но, по одной штуке за раз. Очень ценный совет.
Вы отправляете эту форму через GET
<form action='' method='get'>
Однако ваша линия $search2 = "'".$_POST['cSelector']."'";
использует $_POST
Вместо этого должно быть $_GET
:
$search2 = "'" . $_GET['cSelector'] . "'";`
ПОСЛЕ ИЗМЕНЕНИЙ ОП
Этот
$search2='Compensation';
и
$search2 = "'".$_GET['cSelector']."'";
не то же самое. Вершина - это просто строковое значение. Внизу строковое значение, заключенное в кавычки, так что это не Compensation
, а 'Compensation'
.
Отредактированный вопрос. Поймал меня на итерации. Пробую все возможные варианты. И форма, и PHP являются GET, и запрос не возвращает результатов. Пустая таблица.
Я использую фрагмент кода с именем DataTables, который представляет собой скачанный мной JS-скрипт. Я думаю, редактируя исходный запрос, я вызываю проблемы в сценарии. Ты ответ правильный. Я хотел избежать необходимости учиться программировать таблицу с поиском с нуля.... но я думаю, что мне, возможно, придется. Спасибо вам всем.
Суть проблемы на самом деле в том, что вы не совсем уверены, что такое запрос. Если бы две отправленные строки были идентичными, они обе выполнялись бы, но это не так. Как-то.
Настоящая потребность — это видимость вашего запроса. Так что-то вроде
$strQuery = "SELECT t1.CategoryID,t1......";
echo "<pre>$strQuery</pre>";
$stmt = $conn->prepare($strQuery)
Теперь вы можете видеть, что он делает. Вы и так действуете вслепую.
Два дополнительных примечания:
вы отправляете эту форму через
GET
, но в$search2 = "'".$_POST['cSelector']."'";
вы используете$_POST
. Вместо этого попробуйте$_GET
.