Member 13518824 Ответов: 2

Mysqli_fetch_assoc() выдает ошибку. Не могу отладить


Здесь я пытаюсь вычислить разницу между датой рождения и сегодняшней датой в месяцах каждого члена клуба из таблицы club_member.

Что я уже пробовал:

Для этого я реализовал приведенный ниже код. Но когда я выполняю его появляется следующая ошибка "Предупреждение: mysqli_fetch_assoc() ожидает, что параметр 1 будет mysqli_result, логическое значение задано в C:\xampp\htdocs\index33.php на линии 228"
$row = mysqli_fetch_assoc($resulttime); //Line 228

Строка 228 показана в приведенном ниже коде

<?php
      $procedure = "  
      CREATE PROCEDURE selectMembers()  
      BEGIN  
      SELECT * FROM club_member ORDER BY CIRP_ID DESC;  
      END;  
      ";  
      if(mysqli_query($conn, "DROP PROCEDURE IF EXISTS selectMembers"))  
      {  
           if(mysqli_query($conn, $procedure))  
           {    
		   		$query = "CALL selectMembers()";  
                $result = mysqli_query($conn, $query); 
				while($row = mysqli_fetch_array($result))  
                     {  
						  			
						  $now = time();
					 	  $timequery = "SELECT bday FROM club_member WHERE CIRP_ID='".$row["CIRP_ID"]."'";
						  $resulttime = mysqli_query($conn, $timequery);
						   
						  $row = mysqli_fetch_assoc($resulttime); //Line 228
						  $then = strtotime($row["bday"]);
						  $difference = ($now - $then);
						  $months = floor($difference / (60*60*24*30) );
						  
						  $sqlinsert = "INSERT INTO `club_member`(`Months`) VALUES ('".$months."')";
			
						  $resultinsert = mysqli_query($conn,$sqlinsert);			

                     } 
		   }
	  }
?> 



Здесь я пытаюсь назначить новые значения для $row внутри цикла while, который работает на исходном значении $row. Я думаю, что именно это и является причиной этой ошибки. Но у меня нет никакой идеи делать вычисления и заполнять эту ячейку таблицы этой конкретной записью иначе. Если вы можете показать мне другой путь, это было бы здорово. Пожалуйста помочь :')

2 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Эта конкретная ошибка означает, что он получил обратно значение True/False вместо объекта. Это означает, что ваш запрос не вернул никаких результатов и, по сути, не был выполнен. Возврат от неудачи является ложным.

Проверьте свой SQL - лучший способ? Введите запрос, который, как вы знаете, будет работать (например, тест в mySQL manager).



Member 13518824

SQL работает просто отлично, он дает желаемый результат и в phpmyadmin. Я также улучшил sql;

$timequery = "выберите bday в качестве даты из club_member, где CIRP_ID='IT16023192'";
$result = mysqli_query($conn, $timequery);
$row = mysqli_fetch_assoc($result);
$then = strtotime($row["дата"]);

Но все же ошибка есть. "Предупреждение: mysqli_fetch_assoc() в строке 228"

Member 13518824

Как мне получить значение( в данном случае дату) вместо TRUE/FALSE?

W∴ Balboos, GHB

Запрос в вашем коде не работает. Возможно, попробуйте отправить текст вашего запроса на экран из приложения и посмотрите, так ли это, как вы думаете, должно быть.

Возврат из успешного запроса - это объект, из неудачного запроса-логическое значение (==false). Именно то, что написано в сообщении об ошибке. (my_sql_result-это объект).

У вас есть запросы, вложенные в запросы - и никто не может знать, какая строка является строкой 228.

Узнайте, как выглядят запросы, которые генерирует ваш код, и если он делает несколько запросов, как вы обрабатываете конечные точки и внутренние исключения?

Почему вы создаете процедуру сверху и уничтожаете ее, если она существует, только для того, чтобы создать ее снова? Вы упускаете какой-то смысл проведения процедуры.

Рейтинг:
0

Richard MacCutchan

Видеть РНР: в mysqli::запрос - руководство по эксплуатации[^] для различных типов результатов, которые вы можете получить.