在使用之前如何检查返回值是否为数组?

时间:2016-02-13 04:17:57

标签: php mysql arrays mysqli

我有这个功能:

//get mgs by orderID
function getOrderMsgs($orderId){
    global $conn;
    $query = "SELECT * ";
    $query .= "FROM msgs ";
    $query .= "WHERE orderid=" . $orderId . " ";
    $msgset = mysqli_query($conn, $query);
    confirm_query($msgset);
    while ($msg = mysqli_fetch_assoc($msgset)){
        $return[] = $msg;
    } 
    return $return;
}

返回具有特定消息ID的所有消息。现在我需要做的是检查返回的值是否确实是一个数组,因为在查询之后我们可能找不到具有该特定Id的消息,我相信它不会返回一个数组。到目前为止,这就是我所拥有的:

$msgId = sql_prep($_GET['oid']);
$order = getOrderById($msgId);
$msgs=getOrderMsgs($msgId);
echo '<h2>Order #'.$order['orderid'].': '.$order['title'].'</h2>';
echo '<h3>Message thread</h3>';
foreach($msgs as $msg){
    echo $msg['msg'].'<br>'.$msg['sender'].'<br>'.$msg['timestamp'].'<br><br>';
}

如果db中没有带有该id的消息,则返回错误。

2 个答案:

答案 0 :(得分:0)

要查看变量的类型,您可以使用gettype

    print_r(gettype($_COOKIE));

答案 1 :(得分:0)

确保在使用之前初始化$return。这可以确保您始终返回一个数组。

function getOrderMsgs($orderId){
    global $conn;
    $return = array(); // initialize variable

    $query = "SELECT * ";
    $query .= "FROM msgs ";
    $query .= "WHERE orderid=" . $orderId . " ";
    $msgset = mysqli_query($conn, $query);
    confirm_query($msgset);
    while ($msg = mysqli_fetch_assoc($msgset)){
        $return[] = $msg;
    } 
    return $return;
}

在您的代码中,您可以检查数组并使用数组元素的数量来决定下一步该做什么。

$order = getOrderById($msgId);
if(count($order) > 0) {
  // Found something
} else {
  // Nothing found
}