【问题标题】:Add an array at the end of an array in PHP在PHP中的数组末尾添加一个数组
【发布时间】:2017-09-02 01:02:08
【问题描述】:

我有一个“Android”项目,我需要从数据库中获取一些信息。数据库是“MySQL”。我必须通过网络服务,因为我之前从未做过任何 PHP,我几乎看不到问题,因为逻辑对我来说似乎没问题。

这是我的代码:

<?php

        require 'connect.php';

        $username = 'alex@hotma';
        $password = 'soleil';

        $sql = 'SELECT ID, NAME, PASSWORD, EMAIL FROM Account';
        #$sql = 'CALL Login('.$username .', '. $password .')';

        $result = $conn->query($sql);

        $response = array();

        if (!empty($result))
        {
            if($result->num_rows > 0) 
            {
                $response['success'] = 1;
                $users = array();

                while($row = $result->fetch_assoc()) 
                {
                    $user = array();
                    $user["id"] = $row["ID"];
                    $user["name"] = $row["NAME"];
                    $user["password"] = $row["PASSWORD"];
                    $user["email"] = $row["EMAIL"];

                    //Trying to add the user into my users array

                    //If i uncomment this line everything is shown, but not in the response array
                    //echo json_encode($user);
                    array_push($users, $user);
                }
                $response['users'] = $users;
            }
            else
            {
                $response['success'] = 0;
                $response['message'] = 'No user found';
            }
        }
        else
        {
            $response['success'] = 0;
            $response['message'] = 'No user found';
        }

        echo json_encode($response);
        $conn->close();
?>

我的数据库中目前有超过 6 个用户,但我似乎无法全部获取。我已经对我的一些代码进行了注释,因此您可以看到我尝试过的内容,可惜没有任何成功。我想返回一个包含我所有用户的“JSON”数组。

你们中有人知道如何进行吗?

【问题讨论】:

  • $response['user'] 或 $response['users']?
  • 我更喜欢 $response['users'];我看到我在那里留下了一些不受欢迎的代码,我的错
  • 那么你的脚本的输出是什么?
  • 目前没有任何显示。但是,如果我取消注释循环中的“回声”,一切都会出现,只是不会出现在“$response”中。我希望响应包含数组 users 中的所有用户。
  • 顺便说一句,# 不是 PHP 中的注释,请使用 // 或 /* */

标签: php android mysql arrays


【解决方案1】:

我想知道你是否有一个范围错误,我不是完全最新的 php 范围规则,所以试试这个。

 <?php

            require 'connect.php';

            $username = 'alex@hotma';
            $password = 'soleil';

            $sql = 'SELECT ID, NAME, PASSWORD, EMAIL FROM Account';
            #$sql = 'CALL Login('.$username .', '. $password .')';

            $result = $conn->query($sql);

            $response = array();

             $users = array();// maybe you have scoping error, put this here
            if (!empty($result))
            {
                if($result->num_rows > 0) 
                {
                    $response['success'] = 1;
                    #$response['user'] = array();

                    while($row = $result->fetch_assoc()) 
                    {
                        $user = array();
                        $user["id"] = $row["ID"];
                        $user["name"] = $row["NAME"];
                        $user["password"] = $row["PASSWORD"];
                        $user["email"] = $row["EMAIL"];

                        #Trying to add the user into my users array
                        #$response['users'][] = $user;

                        #echo json_encode($user);
                       // array_push($users, $user);
                        $users[] = $user;
                    }
                }
                else
                {
                    $response['success'] = 0;
                    $response['message'] = 'No user found';
                }
            }
            else
            {
                $response['success'] = 0;
                $response['message'] = 'No user found';
            }

            $response['users'] = $users;
            $conn->close();

            return json_encode($response);
    ?>

【讨论】:

  • 这是它的输出:'注意:未定义的变量:D:\xampp\htdocs\php\login.php 中的用户在第 36 行 {"success":1,"users":null, "user":{"id":"6","name":null,"password":"baya","email":"someone@so"}}' 只显示最后一个用户
  • 您的 json 响应不应包含名为“user”的字段,并且“users”不应为空,因为它是一个空数组。
  • 第 36 行是什么?是 $response['users'] = $users; 吗?
  • # 不是 php 注释。
  • @victor '$response['users'] = $users;'这是在第 36 行
【解决方案2】:

恕我直言,这有效

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

include"config.inc.php";

$mysqli = mysqli_connect("$host", "$user", "$mdp", "$db");

if (mysqli_connect_errno()) { echo "Error: " . mysqli_connect_error($mysqli); }

$query = " SELECT ID, NAME, PASSWORD, EMAIL FROM Account ";
$stmt1 = $mysqli->prepare($query);

$results = $stmt1->execute();
$stmt1->bind_result($ID, $NAME, $PASSWORD, $EMAIL);
$stmt1->store_result();

  if ($stmt1->num_rows > 0) {
  $users = array();
  $user = array();
  while($stmt1->fetch()){
    echo"[ $ID / $NAME / $PASSWORD / $EMAIL ]<br />";

    $user["ID"] = "$ID";
    $user["NAME"] = "$NAME";
    $user["PASSWORD"] = "$PASSWORD";
    $user["EMAIL"] = "$EMAIL";

    array_push($users, $user);
  }
}
else
{ echo"[ no data ]"; }

print_r($users);
echo json_encode($users);

?>

【讨论】:

  • 你能解释一下我的代码和你的代码之间的主要区别是什么吗?我看到你使用声明,这种方法的主要好处是什么?
  • prepared statements 使其更易于阅读/维护,并且在许多方面对于其他目的更安全,例如使用用户输入数据时的 INSERT / UPDATE 和 SELECT(顺便说一句:我发布的代码有效,我刚刚测试了它的不同之处:查询 -> SELECT id, nom, prenom FROM tbl_students LIMIT 3(匹配我的数据库)
  • 编辑太晚了:还有,$users = array(); $用户 = 数组();都声明了 before 循环,以免被覆盖/重置
  • 在结束与“oldPadawan”的对话后,我稍微摆弄了这段代码。他的解决方案和@victor 一样有效。问题是字符集编码。我已经在 [here] (stackoverflow.com/a/19999720/3229805) 阅读过它,解决方案是简单地添加 'mysqli_set_charset($conn, 'utf8')' 并且一切都完美无缺。这篇文章的两个答案都是正确的。
猜你喜欢
  • 2021-02-07
  • 2021-12-28
  • 2021-04-24
  • 2017-09-18
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
相关资源
最近更新 更多