2

我正在尝试从一个表中获取一组 id 并从另一个表中获取 id 的详细信息。这两个表都来自两个不同服务器上的 2 个不同的数据库。当另一个表中的数据为空时出现错误。

在下面的示例中,我将所有 user_id 存储在一个名为 $user_data 的数组中。然后,我想追加到现有数组并将更多信息(如 first_name、last_name 和 email)添加到相同的 user_id。

表:用户

$user_data = array();

$sql_get_userid = "SELECT user_id FROM user
                   WHERE apply_date = ?";

$statement_get_id = $DB_3306->link->prepare($sql_get_userid);
$statement_get_id->bind_param("s", $date);
$statement_get_id->execute();

if($rs_get_id =  $statement_get_id->get_result())
{
    while($row = $rs_get_id->fetch_assoc())
    {
        $user_data[] = $row;
    }
}

有时 user_id 可能仍然存在,但另一个表中与 user_id 关联的数据已过时并被删除。因此,当我尝试检索不存在的数据时出现错误。

表:user_personal

$sql_get_user_data = "SELECT first_name, last_name, email FROM user_personal
WHERE user_id = ?"

foreach($user_id as $user => $child)
{ 
    $user_id = $child['user_id'];

    $statement_get_data = $DB_3308->link->prepare($sql_get_user_data);
    $statement_get_data->bind_param("s", $user_id);
    $statement_get_data->execute();

    if($rs_get_data = $statement_get_data->get_result())
    {
        while($row = $rs_get_data ->fetch_assoc())
        {
            if(isset($row['first_name']) && !empty($row['first_name']))
            {
               $first_name = $row['first_name'];
            }
            else
            {
                $first_name = 'NA';
            }
            $user_data[$user]['first_name'] = $first_name;
        }
    }
}

从代码的第二部分可以看出,我尝试检查数据是否已设置且不为空,如果为空则添加一条消息。我仍然收到错误“注意:未定义的索引”。我在这里做错了什么?

编辑:实际上,如果另一个表没有, $user_data 甚至不会附加数据。

//A rough idea of the data stored in $user_data
$user_data = Array( [0] => Array ( [user_id] => 111), [1] => Array ( [user_id] => 222) [2] => Array ( [user_id] => 333))

//If user_id = 333 has no data associated with it in user_personal table the array would look like this (showing only first_name value)
 $user_data = Array( [0] => Array ( [user_id] => 111 [first_name] => Kenny ), [1] => Array ( [user_id] => 222 [first_name] => Kenny) [2] => Array ( [user_id] => 333))

实际上,此处代码中的数组被调用到显示数据的显示文件中。所以,我将 if(isset(var) && !empty(var)) 移动到该文件,到目前为止它工作正常。

4

2 回答 2

2

更改您的代码

        if(isset($row['first_name']) && !empty($row['first_name']))
        {
           $first_name = $row['first_name'];
        }
        else
        {
            $first_name = 'NA';
        }

     to 

        if($row['first_name']!='')
        {
           $first_name = $row['first_name'];
        }
        else
        {
            $first_name = 'NA';
        }

isset 永远不会工作,因为 $row['first_name']总是设置

希望这能解决你的问题

于 2014-10-14T08:07:36.323 回答
0

请更改第二个代码块中的代码

$statement_get_data->bind_param("is", $user_id);

因为所需的参数数量只有一个,并且提供了
两种类型
i 用于整数和
s 用于字符串

所以将该行更改为

$statement_get_data->bind_param("i", $user_id);

请参阅有关 bind_param 的 php 菜单

http://php.net/manual/en/mysqli-stmt.bind-param.php

于 2014-10-14T08:26:23.157 回答