PHP, возвращающий массив в функции - PullRequest
0 голосов
/ 09 января 2019

Я новичок в 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);

Функция работает до точки, где она будет печатать результат, который по сути различен для массива. Однако мне нужно использовать возвращение в таблице в другом месте, но var-dump просто возвращает NULL.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Как и весь комментарий выше - вы используете $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);

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

0 голосов
/ 09 января 2019

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

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);
0 голосов
/ 09 января 2019

Ваш код должен быть таким, как указано ниже. Вместо того, чтобы считать в 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);
...