【问题标题】:PHP MySQLi get the row using foreachPHP MySQLi 使用 foreach 获取行
【发布时间】:2013-10-24 06:30:17
【问题描述】:

我创建了这个函数,用于从 mysqli 数据库中获取数据行。

我尝试使用 foreach,但我得到的只是我附上了图片,请查看。

抱歉,我无法发布图片,这需要我 10 声望才能做到这一点。

下面: 是的,这就是我得到的1 2 x M M n O O X

下面我的代码带有表单和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 代码有什么问题。

谢谢。

【问题讨论】:

标签: php mysql foreach mysqli


【解决方案1】:

解释

问题出在这里:

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,....)

您正在调用函数hs_debugSQL 使用我想执行的 SQL,但在您的函数中,第一个参数是数据库链接,第二个参数是您要执行的 SQL。您应该更改它以匹配函数的参数。

您正在调用函数hs_getrows,并在第一个参数中使用数据库链接,并且在函数声明中您期望$sql,因此您应该更改它。

【讨论】:

  • 正如在另一个答案中指出的那样,整个方法非常糟糕。所以,让它再次发布,准备使用 - 显然是对 OP 的伤害
【解决方案2】:

我不禁认为这些“帮助”功能使事情变得比应有的复杂。这里有不止一个问题,但这里有一个至关重要的问题:

这个函数:

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

需要传入一个数据库连接资源$hs_db,而这段代码:

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 并且查询 似乎丢失了。

简化!摆脱这些无用的功能,澄清你正在尝试做的事情并让某些事情发挥作用。然后,如果您觉得需要再次封装其中的一些内容,请在知道代码基本上可以正常工作的情况下继续这样做。

【讨论】:

    【解决方案3】:

    如果你想使用real helper

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

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2012-02-12
      • 2010-12-17
      • 2023-04-10
      相关资源
      最近更新 更多