PHP函数不返回数组

时间:2016-06-11 13:05:00

标签: php html

我一直试图从PHP函数中提取数组。但我只得到一个NULL。这是函数涉及的代码:

功能本身:

public static function priceIDToLabel($priceID){
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label)
    $conn = global_functions::connectdb();
    $errormsg = '';
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."';
    $result = $conn->query($sql);
    //$ticketLabel = array();
    while ($ticketLabel = $result->fetch_assoc()){

        $ticketLabel[] = $result->fetch_assoc();

    }
    return($ticketLabel);
}

应该从上面的函数显示数组的网站:

        <table>
                <!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! -->
                <!-- Weil wegen isset! Und zu wenig Kaffee!.. -->
        <?php

            $ticketLabel['label'] = global_functions::priceIDToLabel($selTicket);

            echo '<textarea readonly>' .$ticketLabel['label'] . ' </textarea>';

        ?>


    </table>

2 个答案:

答案 0 :(得分:1)

如果这个价格只有一个标签,那么你的循环在这里是没用的,因为你不会得到一个数据数组,而只是一个数据。

所以,试试:

public static function priceIDToLabel($priceID){
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label)
    $conn = global_functions::connectdb();
    $errormsg = '';
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."';
    $result = $conn->query($sql);
    $row = $result->fetch_assoc();
    return($row['label']);
}

您也不需要使用ticketLabel数组,只需使用标签变量:

<table>
<!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! -->
<!-- Weil wegen isset! Und zu wenig Kaffee!.. -->

<?php
    $label = global_functions::priceIDToLabel($selTicket);
    echo '<textarea readonly>' . $label . ' </textarea>';
?>

-

或者,如果您真的希望函数返回整个数据对象,只需更改return参数:

尝试:

public static function priceIDToLabel($priceID){
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label)
    $conn = global_functions::connectdb();
    $errormsg = '';
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."';
    $result = $conn->query($sql);
    $row = $result->fetch_assoc();
    return($row);
}

并且:

<table>
<!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! -->
<!-- Weil wegen isset! Und zu wenig Kaffee!.. -->

<?php
    $ticketLabel = global_functions::priceIDToLabel($selTicket);
    echo '<textarea readonly>' .$ticketLabel['label'] . ' </textarea>';
?>

答案 1 :(得分:1)

首先,您的SQL查询构造错误,您正在混合单引号和双引号。我相信它应该是:

$sql = 'SELECT label FROM data WHERE priceID = "' . $priceID . '"';

接下来,如果我正确理解您的要求,您只希望从该查询返回最多一行,因此fetch_assoc足以检索单行。你不需要while循环。

所以整个功能应该是:

public static function priceIDToLabel($priceID){
    $conn = global_functions::connectdb();
    $errormsg = '';
    $sql = 'SELECT label FROM data WHERE priceID = "' . $priceID . '"';
    $result = $conn->query($sql);
    $result_row = $result->fetch_assoc();

    if (!empty($result_row))
        return($result_row['label']);
    else
        return "";
}

但是停止!

真的应该考虑使用PDO来准备您的查询。如果您使用的是MySQL,那么可以使用许多教程。正如评论中所提到的,SQL注入非常容易打击,但如果发生在您身上,可能会造成严重损害。所以请确保你不要让这个功能像那样投入生产。