Почему я не могу иметь предложение where в запросе выбора с mysql_fetch_array? [Дубликат]

0

Это может звучать как вопрос о нобе, но я думаю, что я все пробовал, и ive застрял в течение нескольких недель, и это не делало никаких успехов.

Это мой рабочий код:

//$connect holds my db login details so ill hide it
$query = '
SELECT *,UNIX_TIMESTAMP(CONCAT_WS(" ", ranking_data_date, ranking_data_time)) AS datetime
FROM tbl_ranking_data
ORDER BY ranking_data_date ASC, ranking_data_time ASC LIMIT 60
';

$result = mysqli_query($connect, $query);
$rows = array();
$table = array();
$table['cols'] = array(
 array(
  'label' => 'Date Time',
  'type' => 'datetime'
 ),
 array(
  'label' => 'Position',
  'type' => 'number'
 )
);

while($row = mysqli_fetch_array($result))

Моя проблема в том, что он всегда выбирает одни и те же данные (и все) из базы данных.

Чтобы исправить это, в идеале было бы вставить предложение where, например:

WHERE user_id=$id_of_current_user

Но я не могу войти в это или что-нибудь, или я получу ошибку.

В основном код такой же, как и выше, но с этой разницей:

//$connect holds my db login details so ill hide it
$query = '
SELECT *,UNIX_TIMESTAMP(CONCAT_WS(" ", ranking_data_date, ranking_data_time)) AS datetime
FROM tbl_ranking_data
WHERE user_id=$id_of_current_user
ORDER BY ranking_data_date ASC, ranking_data_time ASC LIMIT 60
';

Показывает эту ошибку:

Предупреждение: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, boolean задан в файле /files/phpfile.php в строке 32

Мое понимание: запрос терпит неудачу, и он возвращает false (поэтому ошибка говорит о логическом) вместо массива ($ result), но он не должен терпеть неудачу!

он только терпит неудачу, если я добавлю условие WHERE.

Любая помощь оценивается.

Как я могу вставить предложение where в этот код?

  • 2
    Используйте параметризованный запрос, избавит вас от множества головных болей. Подсказка: PHP не будет оценивать переменную в строке, заключенной в одинарные кавычки, вместо этого используйте двойные кавычки.
  • 0
    Я перепробовал все, двойные, одинарные и без кавычек.
Теги:
mysqli

1 ответ

0
Лучший ответ

Проблема с вашим запросом - это не предложение where, это переменная в вашем аргументе where. Если вы повторите свой запрос при возникновении такой проблемы, вы увидите, что запрос не имеет правильного синтаксиса.

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

Кроме того, используйте обратные ссылки для указания имен столбцов и имен таблиц. Это позволит избежать проблем с зарезервированными словами.

Наконец, используйте параметризованные запросы, чтобы избежать проблем с цитированием данных, а также SQL Injection.

//  $connect holds my db login details so I'll hide it
$query = "
SELECT 
    *,
    UNIX_TIMESTAMP(CONCAT_WS(' ', 'ranking_data_date', 'ranking_data_time')) AS 'datetime'
FROM 'tbl_ranking_data'
WHERE 'user_id' = $id_of_current_user
ORDER BY 'ranking_data_date' ASC, 'ranking_data_time' ASC 
LIMIT 60;
";

$result = mysqli_query($connect, $query);
$rows = array();
$table = array();
$table['cols'] = array(
    array(
        'label' => 'Date Time',
        'type' => 'datetime'
     ),
    array(
        'label' => 'Position',
        'type' => 'number'
     )
);
  • 0
    Почему бы не показать параметризованный запрос, если вы включили пример кода?
  • 0
    Потому что это предложение для улучшения, а не реальная проблема с кодом ОП.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню