Я пытаюсь получить набор идентификаторов из одной таблицы и получить информацию об идентификаторе из другой таблицы. Обе таблицы взяты из 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)) к этому файлу, и пока он работает нормально.
Измените свой код с
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']
всегда установлен
Надеюсь, что это решит вашу проблему
пожалуйста, измените код во втором блоке кода, который является этим
$statement_get_data->bind_param("is", $user_id);
потому что количество необходимых параметров только один и поставляется два
Два типа
я за целое число и
s для строки
поэтому измените эту строку на
$statement_get_data->bind_param("i", $user_id);
пожалуйста, посмотрите php-руководство о bind_param