У меня есть база данных с таблицей, которая включает, среди прочего, один столбец дат (столбец под названием «дата») в формате Ymd.
Я хочу извлечь все строки данных, которые были зарегистрированы в течение текущего месяца, поэтому я использую следующий запрос:
$year_month = date("Ym"); $query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'";
Когда я выполняю запрос и пытаюсь выводить его визуально, я получаю сообщение об ошибке «Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL в строке 64».
Строка 64 – это начало следующего цикла:
while($row = mysql_fetch_array($result, MYSQL_ASSOC) { echo "Name :{$row['date']} <br>"; }
Я просмотрел google и тоже посмотрел сюда, но я не могу понять эту, казалось бы, простую проблему. Насколько я могу судить, фактический запрос выполняется просто отлично.
Есть идеи?
** Дополнительно – вызов MySQL Query Ниже **
$result = mysqli_query($conn, $query);
$ conn относится к следующей строке:
$conn = @mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to MySQL');
На меня выпрыгивают две вещи:
Вы уверены, что это вопрос с этим результатом? Запросы, такие как insert
и delete
, не имеют результатов. Они возвращают логическое значение, указывающее на успех.
Вы проверяете, удалось ли выполнить запрос? После строки, где вы вызываете mysql_query
, убедитесь, что вы проверили результат. Если это неверно, вы можете вызвать mysql_get_error
чтобы узнать, что пошло не так.
EDIT: Хорошо, ваша настоящая проблема заключается в том, что вы смешиваете команды mysql_*
и mysqli_*
. Вы должны использовать тот или иной.
Что-то вроде этого должно работать хорошо …
if(!$result) throw new Exception("MySQL Error: ".mysql_error()." (#".mysql_errorno().")"); if(mysql_num_rows($result) <= 0) echo "No results found."; else while($row = mysql_fetch_array($result, MYSQL_ASSOC)) echo "Name :{$row['date']} <br>";
Если вы не понимаете ошибки, которые вы получаете от mysql_error()
и mysql_errorno()
, затем mysql_errorno()
вывод, и мы сможем помочь с ним.
$query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'";
должно быть
$query = "SELECT `date` FROM tracker WHERE `date` LIKE '$year_month%'";
date – зарезервированное слово в sql.
ищите больше примеров здесь
Что такое тип данных для поля даты, если это тип даты, тогда вы должны попробовать следующее:
$query = "SELECT date FROM tracker WHERE year(date)='".date("Y")." and month(date) = '".date("m")."'"; $year_month = date("Ym"); $result = mysql_query($query); while($row = mysql_fetch_array($result, MYSQL_ASSOC) { echo "Name :{$row['date']} <br>"; }