2016-06-11 68 views
-1

我一直在試圖從PHP函數中提取數組。但我只得到一個NULL。下面是該功能涉及的代碼:PHP函數不返回數組

功能本身:

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> 
+0

嘗試使用var_dump($ ticketLabel);查看數據庫是否有任何返回 – Fil

+0

查詢是否預期完全返回一行?你只是簡單地調用'fetch_assoc()'_twice_,而第二次它會返回false。 –

+0

你不應該像這樣傳遞參數(更多信息:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers) –

回答

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>'; 
?> 

-

或者,如果您確實希望函數返回整個數據對象,只需更改返回參數:

嘗試用:

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>'; 
?> 

+0

似乎不起作用。 textarea裏面有一個角色,但是裏面沒有任何信息。 – Drago100ful

+0

嘗試檢測腳本的哪一部分存在問題,請添加'echo $ conn;'或'echo $ result;'或'var_dump($ ticketLabel);'像Fil說的那樣,看看顯示的內容是否正確。 –

+0

變量保持爲NULL。這是我最初的問題 – Drago100ful

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注入非常容易打擊,但如果它發生在您身上,可能會造成嚴重的損害。所以確保你不要讓這個功能像這樣進入生產。

+0

謝謝,真的沒有注意到它。我可能會考慮後面的項目中的PDO – Drago100ful

+2

@ Drago100ful你真的應該去學習PDO,它的實現相當簡單,但它有助於防止數據庫中最簡單的攻擊形式之一。確保這些代碼不會像這樣投入生產。 –