【问题标题】:mysqli results not filling in valuesmysqli 结果未填写值
【发布时间】:2016-01-11 22:35:48
【问题描述】:

我一直在尝试从创建新类“Book”的 mysqli 查询创建一个数组。当我运行此代码时,它会返回数据库中正确的行数,但不会显示行中的任何值。绝对是很多这些东西的新手,非常感谢任何帮助!这是我正在运行的代码。如果我只是放入一个预先填充的数组,那么代码一切都很好。我的问题是从数据库中获取值到这个数组中。

$db = new db();
        $conn = $db->connect();

        $sql = "SELECT * FROM users";
        $result = mysqli_query($conn, $sql);
        $thearray = array();
        while($array_ar = mysqli_fetch_array($result)){

            $thearray[] = array(
                $array_ar['username'] => new Book($array_ar['username'], $array_ar['first_name'], $array_ar['last_name']),
            );

        }

        echo 'Rows found: ' . mysqli_num_rows($result);

        return $thearray;

好的,所以我 var_dump($thearray);它给了我一个多维数组,这就是它返回空值的原因。我想我需要它来返回一个关联数组?这就是它 var_dump($thearray);返回:

array(4) {

            [0]=> array(1) {
                ["joshua"]=> object(Book)#6 (3) {
                    ["title"]=> string(6) "joshua" ["author"]=> string(6) "Joshua" ["description"]=> string(9) "Lundquist"
                }
            }

            [1]=> array(1) {
                ["matthew"]=> object(Book)#7 (3) {
                    ["title"]=> string(7) "matthew" ["author"]=> string(4) "Matt" ["description"]=> string(3) "Alm"
                }
            }

            [2]=> array(1) {
                ["roger"]=> object(Book)#8 (3) {
                    ["title"]=> string(5) "roger" ["author"]=> string(5) "Roger" ["description"]=> string(9) "Lundquist"
                }
            }

            [3]=> array(1) {
                ["norm"]=> object(Book)#9 (3) {
                    ["title"]=> string(4) "norm" ["author"]=> string(4) "Norm" ["description"]=> string(5) "Shupe"
                }
            }

        }

接下来我想看看 var_dump();因为我的硬编码数组看起来像,它输出这个(这个有效):

array(3) {

        ["Jungle Book"]=> object(Book)#3 (3) {
            ["title"]=> string(11) "Jungle Book" ["author"]=> string(10) "R. Kipling" ["description"]=> string(15) "A classic book."
        }

        ["Moonwalker"]=> object(Book)#4 (3) {
            ["title"]=> string(10) "Moonwalker" ["author"]=> string(9) "J. Walker" ["description"]=> string(7) "another"
        }

        ["PHP for Dummies"]=> object(Book)#5 (3) {
            ["title"]=> string(15) "PHP for Dummies" ["author"]=> string(14) "Some Smart Guy" ["description"]=> string(18) "and the final one."
        }

    }

发生的事情对我来说很有意义,但我不确定如何修复我的代码。感谢您的帮助!

【问题讨论】:

  • 既然你已经在你的代码中加入了一个 echo/prinft “调试器”,那么在 return $thearray; 之前的 var_dump($thearray); 会打印什么?你用error_reporting=E_ALL|E_STRICT看php error log吗?
  • 打开error_reporting(E_ALL); 并检查是否有任何警告。
  • 我添加了 var_dump();并注意到上面的变化。再次感谢您的帮助!

标签: php mysql mysqli


【解决方案1】:

Don't Panic 的回答让我找到了正确的方向。我需要创建一个关联数组,而不是多维数组。起初,我不小心通过将 $thearray 设置为“array();”来创建多维数组。通过删除它,它正确填写了值。再次感谢您的帮助!

    $db = new db();
    $conn = $db->connect();

    $sql = "SELECT * FROM users";
    $result = mysqli_query($conn, $sql);
    $thearray = array();
    while($array_ar = mysqli_fetch_array($result)){

        $title = $array_ar['username'];
        $author = $array_ar['username'];
        $description = $array_ar['username'];

        $thearray[] = $title = new Book($title, $author, $description);

    }
    var_dump($thearray);
    echo 'Rows found: ' . mysqli_num_rows($result);

    return $thearray;

【讨论】:

  • 我很高兴你能成功。但是你真的在使用$thearray[] = $title = new Book($title, $author, $description);吗?这看起来有点奇怪,有点像它仍然会创建一个数字索引数组。
  • 它正在工作,但我肯定愿意以不同/更好的方式来做。我对使用 mysqli 和 php 还是很陌生,而且我经常觉得我正在通过它来尝试学习,因为我在进行中。我想要做的是为我的网站开发一个 mvc,以使事情更好地组织等等。我用这个函数创建了一个数组,该函数被传回控制器并填充我的模板(视图)。我使用 foreach() 循环来回显视图中的每个项目。如果这是有道理的......
  • 确实有道理。我认为它现在正在工作的事实意味着您认为发生的事情并不真正取决于 $thearray 拥有字符串键。当您执行 $thearray[] = $title = new Book... 时会发生什么是多重分配。基本上,创建新的Book 并将其分配给$title 变量,替换它之前保存的字符串,然后将$title 的新值添加到$thearray。
【解决方案2】:

我认为这是问题所在。

$thearray[] = array(
    $array_ar['username'] => new Book(
        $array_ar['username'], $array_ar['first_name'], $array_ar['last_name']),
);

看起来你得到的和你想要的之间的区别是 1) 你将输入到 $thearray 包装在一个额外的 array() 层中,并且 2) 你不会得到像这样的字符串键如果您只是使用[] 添加项目,您的硬编码数组中就有。

试试这样吧:

// use the username as a key, since that is what it looks like you're using as the 'title'
$thearray[$array_ar['username']] = new Book(
    $array_ar['username'], $array_ar['first_name'], $array_ar['last_name']);

【讨论】:

  • 这似乎不太奏效,但它让我对问题的看法有所不同。感谢您的帮助!
猜你喜欢
  • 2015-10-19
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多