我一直试图从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>
答案 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注入非常容易打击,但如果发生在您身上,可能会造成严重损害。所以请确保你不要让这个功能像那样投入生产。