sql не возвращает результатов
Следующий код не возвращает результатов, где я использую переменную в коде $dep, если я вручную введу значение 1, то он вернет ожидаемый результат. Я попробовал это без кавычек одинарные кавычки и двойные кавычки. Я посмотрел множество примеров, и я не вижу, что я делаю неправильно
$dep = 1;
if (!$names) {
$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE
. ' WHERE dept_id='$dep' ORDER BY `sort`";
$res = db_query($sql);
3 ответа
Я уверен, что ваша ошибка связана с неверными цитатами. В своем коде вы пишете
$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE
. ' WHERE dept_id='$dep' ORDER BY `sort`";
После FROM вы используете одинарные кавычки ('), но весь ваш запрос был заключен в двойные кавычки ("), что создает проблему.
Так должно быть:
$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ".TOPIC_TABLE
. " WHERE dept_id='$dep' ORDER BY `sort`";
РЕДАКТИРОВАТЬ: забыл указать, что вы должны серьезно использовать PDO или любые другие методы предотвращения SQL-инъекций. Если при каких-либо обстоятельствах ваша переменная $dep может быть отправлена через открытую форму, вы можете получить в лучшем случае сброс вашей БД.
Сначала, как говорит Фред -ii, убедитесь, что оператор if выполняется правильно. Тогда если dept_id
это целочисленное значение, тогда вам не нужны одинарные кавычки, как говорит scaisEdge. В противном случае SQL выглядит нормально. Убедитесь, что в базе данных есть записи для dept_id
это передается в.
Во второй строке запроса есть синтаксическая ошибка - если вы хотите, чтобы в запросе были одинарные кавычки, вам нужно заключить все в двойные кавычки:
$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ' .TOPIC_TABLE
. " WHERE dept_id='$dep' ORDER BY `sort`";
Между прочим, построение такого запроса с использованием конкатенации строк является ДЕЙСТВИТЕЛЬНО ПЛОХОЙ ИДЕЕЙ и оставляет вас открытыми для атак с использованием SQL-инъекций - вместо этого вы должны использовать подготовленные операторы и параметры.