簡體   English   中英

PHP MySQLi使用foreach獲取行

[英]PHP MySQLi get the row using foreach

我具有為從mysqli數據庫獲取數據行而創建的此功能。

我嘗試使用foreach,但唯一得到的是類似我附加的圖片的圖片,請查看。

抱歉,我無法發布圖片,因此我需要10點信譽才能做到。

下面:是的,這就是我得到的1 2 x MM n OOX

我的以下代碼與形式和PHP

## FOR SHORTHAND DATABASE
if ( !function_exists( 'hs_debugSQL' ) ) {
    function hs_debugSQL($hs_db, $string, $debug=0) {
        if ($debug == 1)
            print $string;
        if ($debug == 2)
            error_log($string);
        $result = mysqli_query($hs_db, $string);
        if ($result == false) {
            error_log("SQL error: ".mysqli_error($hs_db)."\n\nOriginal query: $string\n");
            // Remove following line from production servers 
            die("SQL error: ".mysqli_error($hs_db)."\b<br>\n<br>Original query: $string \n<br>\n<br>");
        }
        return $result;
    }
}

## FOR SELECT SQL
if ( !function_exists( 'hs_getrows' ) ) {
    function hs_getrows($sql, $debug=0) {
        $result = hs_debugSQL($sql, $debug);
        if($lst = mysqli_fetch_array($result)) { 
            mysqli_free_result($result); 
            return $lst; 
        }
        mysqli_free_result($result);
        return false;
    }
}

形成

<label for="message_title">Send to Admin <span class="red">*</span></label>
<input id="name" name="user_to" class="text" />
<select name="user_to">
    <?php
    global $hs_db;
    $get_list_admin = hs_getrows( $hs_db, "SELECT * FROM hs_users WHERE user_control = 'admin' " );
    foreach ( $get_list_admin as $keys ) {
        echo '<option value="'.$keys['user_login'].'">'.$keys['user_login'].'</option>';    
    }
    ?>
</select>

從mysqli的連接很好,因為您可以看到我可以從mysqli獲取數據。 但是當我使用foreach檢索數據時,它僅顯示1個數字,有時還顯示1個字符。

我喜歡學習foreach代碼的問題。

謝謝。

說明

問題在這里:

if($lst = mysqli_fetch_array($result)) { 
     mysqli_free_result($result); 
     return $lst; 
}

mysqli_fetch_array返回,您應該遍歷結果並返回數組。 像這樣

$lst = array();
while ($lst = mysqli_fetch_array($result)){
    $lst[] = $row;
}
mysqli_free_result($result);

return $lst;

編輯:

好吧,我看到了另外一個東西

hs_debugSQL($sql, $debug);

並以形式

hs_getrows( $hs_db,....)

我想您正在用要執行的SQL調用函數hs_debugSQL ,但是在您的函數中,第一個參數是數據庫鏈接,第二個參數是您想要執行的SQL。 您應該更改它以匹配該函數的參數。

並且您在第一個參數和函數聲明中通過數據庫鏈接調用函數hs_getrows ,您期望使用$ sql,因此應對此進行更改。

我禁不住認為這些“輔助”功能使事情變得比應有的復雜。 這里有一個以上的問題,但是這是一個關鍵的問題:

該功能:

    function hs_debugSQL($hs_db, $string, $debug=0) {

需要傳入$ hs_db(一種dtabase連接資源),而此代碼為:

function hs_getrows($sql, $debug=0) {
    $result = hs_debugSQL($sql, $debug);        // where is $hs_db?
    if($lst = mysqli_fetch_array($result)) { 
        mysqli_free_result($result); 
        return $lst; 
    }
    mysqli_free_result($result);
    return false;

無法提供那個關鍵論點。 當然,進一步上漲的調用序列,我們發現$hs_db 已經提交,但現在已經被稱為$sql查詢似乎缺少。

簡化! 擺脫這些無用的功能,弄清您要做什么並使其正常工作。 然后,如果您覺得有必要再次封裝其中的某些內容,請繼續工作,並知道代碼基本可以正常工作。

如果您想使用真正的助手

<?php
$sql = "SELECT user_login FROM hs_users WHERE user_control = 'admin'";
$admin_list = $hs_db->getCol($sql);
?>
<label for="message_title">Send to Admin <span class="red">*</span></label>
<input id="name" name="user_to" class="text" />
<select name="user_to">
<?php foreach ($admin_list as $admin): ?>
    <option value="<?=$admin?>"><?=$admin?></option>
<?php endforeach ?>
</select>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM