Я новичок в PHP MySqli, и это мой первый проект. Я пытаюсь вернуть значение из функции, поместив его в массив.
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection;
$sql = "SELECT ".$id." FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
if ($result = mysqli_query($connection,$sql)) {
$count = 0;
while ($row = mysqli_fetch_array($result)) {
$count = ++ $count;
}
echo "<br>".$type.": " . $count;
$counter[$type] = $count;
return $counter;
}
$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
Функция работает до такой степени, что будет печатать результат, который обычно представляет собой различные числа для массива. Однако мне нужно использовать return в таблице в другом месте, но var-dump просто возвращает NULL.
Вы также, кажется, пропустили завершающий } в определении функции.
Подсчет можно произвести одним запросом SELECT count().
Или с помощью mysql_num_rows, если вам нужны и сами данные






Ваш код должен быть таким, как указано ниже. Вместо подсчета в php вы можете подсчитать его в запросе.
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection; global $counter;
$sql = "SELECT COUNT(".$id.") as cnt FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
$count = 0;
if ($result = mysqli_query($connection,$sql)) {
if ($row = mysqli_fetch_assoc($result)) {
$count = $row['cnt'];
}
}
$counter[$type] = $count;
}
$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
Я думаю, вы можете предположить, что $counter уже имел значение до этого вызова (функция просто назначает тип в массиве)
В этом случае обратите внимание, что вы переопределяете $counter при каждом вызове функции
Как и весь комментарий выше - вы используете $counter, как если бы это была глобальная переменная - в этом случае вы можете добавить global $counter в начале функции, иначе, если вы хотите использовать в качестве возвращаемого значения, вы можете добавить его в аргумент функции.
Вариант 1 - использовать глобальную переменную
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection;
global $counter;
$sql = "SELECT ".$id." FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
if ($result = mysqli_query($connection,$sql)) {
$count = mysqli_num_rows($result);
echo "<br>".$type.": " . $count;
$counter[$type] = $count;
}
}
$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
Вариант 2 - использовать возвращаемое значение
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection;
$sql = "SELECT ".$id." FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
if ($result = mysqli_query($connection,$sql)) {
$count = mysqli_num_rows($result);
echo "<br>".$type.": " . $count;
return $count;
}
}
$type = 'RIDDOR - Major Injury';
$counter[$type] = riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
Я настоятельно рекомендую второй вариант избегать использования глобальных ...
Спасибо за ваш ответ, и это имеет смысл в моей голове - хотя я пробовал оба варианта, но он просто останавливает отображение страницы. Мне нужно будет попробовать дома позже, чтобы попытаться найти ошибку, которая приводит к сбою. Так как могу попробовать только на сайте LIVE.
Добро пожаловать - сообщите мне, если у вас возникнут проблемы
Я должен согласиться - я предпочитаю второй вариант, но похоже, что исходный код OP ведет себя как счетчик глобальный ...
Не уверен - если он не добавил global, то ему также было интересно, почему var_dump($counter); пуст ... потому что функция создает новое имя переменной $counter и возвращает ее без переменной, улавливающей возвращаемое значение функции
Привет, Дэвид, мне удалось установить MySQL на моем рабочем компьютере с БД. Ошибка заключалась в отсутствии символа «i» в $ count = mysq (i) _num_rows ($ result); по обоим вариантам. Теперь он отлично работает именно так, как я хотел. Это похоже на очень длинный путь к моим результатам. Я новичок в PhP / MySQL, и это первый проект с нуля. По сути, это был единственный из моих знаний способ вызвать массив из базы данных, а затем подсчитать все различные элементы в нем для последующего вывода в таблицу. Еще раз спасибо, очень признателен :-)
@DavidWinder спасибо и отметили как выполненное. Это вызвало у меня часы или головную боль :-)
похоже, вы используете дорогостоящий подход. Есть функции, с помощью которых вы можете легко получить количество строк запроса.
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection;
$sql = "SELECT ".$id." FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
$result = mysqli_query($connection,$sql)
return mysqli_num_rows($result);
}
$type = 'RIDDOR - Major Injury';
$counter = riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
большое спасибо за помощь. Я использовал «Вариант 2 - использовать возвращаемое значение» выше Дэвида Виндера, который отлично работает для того, что я хотел. Кажется, это действительно долгий путь, но с моими текущими знаниями он делает то, что мне нужно, пока я не узнаю больше. Еще раз спасибо за ваш вклад :-)
Вы забыли присвоить возвращаемое значение переменной так же, как
$counter = riddor_dates(...)