Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQLi使用foreach获取行_Php_Mysql_Foreach_Mysqli - Fatal编程技术网

PHP MySQLi使用foreach获取行

PHP MySQLi使用foreach获取行,php,mysql,foreach,mysqli,Php,Mysql,Foreach,Mysqli,我创建了这个函数,用于从mysqli数据库获取数据行 我试着用foreach,但我得到的唯一的东西是我附加的图片请查看 对不起,我不能发布图片,这需要我10%的声誉 下: 是的,这是我得到的12 x M n O x 下面是我用表单和php编写的代码 ## FOR SHORTHAND DATABASE if ( !function_exists( 'hs_debugSQL' ) ) { function hs_debugSQL($hs_db, $string, $debug=0) {

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

我试着用foreach,但我得到的唯一的东西是我附加的图片请查看

对不起,我不能发布图片,这需要我10%的声誉

下: 是的,这是我得到的12 x M n 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;
    }
}
形式

从mysqli的连接很好,正如您所看到的,我可以从mysqli获取数据。 但当我使用foreach检索数据时,它只显示1个数字,有时显示1个字符

我喜欢了解我的foreach代码有什么问题

谢谢。

解释

问题在于:

if($lst = mysqli_fetch_array($result)) { 
     mysqli_free_result($result); 
     return $lst; 
}
mysqli_fetch_数组逐行返回,您应该循环遍历结果并返回数组。像这样的

$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,因此应该对此进行更改。

我忍不住认为这些“helper”函数使事情变得更加复杂。这里有不止一个问题,但这里有一个关键问题:

此功能:

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

简化!摆脱这些无用的功能,澄清你正在尝试做什么,并使某些东西起作用。然后,如果您觉得有必要再次封装其中的一些内容,那么请在知道代码基本正常工作的情况下继续这样做。

如果您想使用


正如在另一个答案中指出的那样,整个方法非常糟糕。因此,让它再次发布,随时可用——显然是对OP的伤害
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;
<?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>