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-инъекций - вместо этого вы должны использовать подготовленные операторы и параметры.

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