我试图从一个表中获取一组id,并从另一个表中获取id的详细信息。两个表都来自两个不同服务器上的2个不同的数据库。当另一个表中的数据为空时,我收到错误。
在下面的示例中,我将所有user_id存储在名为$ user_data的数组中。然后,我想附加到现有数组并将更多信息(如first_name,last_name和email)添加到同一user_id。
table:user
$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相关联的数据已过时并被删除。因此,当我尝试检索不存在的数据时,我收到错误。
table: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))移动到该文件,到目前为止它工作正常。
答案 0 :(得分:1)
从
更改您的代码 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']
始终设置
希望这能解决您的问题
答案 1 :(得分:0)
请更改第二个代码块中的代码,即
$statement_get_data->bind_param("is", $user_id);
因为所需参数的数量只有一个而且提供了两个
两种类型
我是整数和
s代表字符串
所以将该行更改为
$statement_get_data->bind_param("i", $user_id);
请参阅关于bind_param的php menual