Почему у меня нет предложения where в select query с mysql_fetch_array? [duplicate]

user394658 спросил: 13 июня 2018 в 03:29 в: php

У этого вопроса уже есть ответ:

  • What is the difference between single-quoted and double-quoted strings in PHP? 11 ответов

Это может звучать как вопрос о нобе, но я думаю, что я все пробовал и 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 (thats почему ошибка говорит о boolean) вместо массива ($ result), но это sh ouldnt fail!

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

Любая благодарность.

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


1 ответ

Есть решение
Sloan Thrasher ответил: 13 июня 2018 в 04:04

Проблема с вашим запросом не является предложением 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'
     )
);
Bill Karwin ответил: 13 июня 2018 в 03:45
Почему бы не показать параметризованный запрос, если вы включили пример кода?
Sloan Thrasher ответил: 13 июня 2018 в 03:47
Потому что это предложение для улучшения и не является реальной проблемой с кодом OP.
user394658 ответил: 13 июня 2018 в 03:58
Этот код возвращает ошибку "Ошибка синтаксиса: ошибка синтаксиса, неожиданность" "в ... в строке 12". Строка 12 - это UNIX_TIMESTAMP (CONCAT_WS ("", ranking_data_date, ranking_data_time)) AS datetime
Sloan Thrasher ответил: 13 июня 2018 в 04:05
См. Обновленный ответ. Пропустили двойные кавычки внутри вашего запроса.
frz3993 ответил: 13 июня 2018 в 04:05
Вам нужно будет избежать внутренних двойных кавычек с обратной косой чертой

Дополнительное видео по вопросу: Почему у меня нет предложения where в select query с mysql_fetch_array? [duplicate]

Уроки MySQL | Выборка данных.SELECT. Условия в SQL.

MySQL Select Query Using PHP

Основы SQL запросов