Проверить наличие пустой строки из mysql в PHP

Я пытаюсь получить набор идентификаторов из одной таблицы и получить сведения об идентификаторе из другой таблицы. Обе таблицы взяты из 2 разных баз данных на двух разных серверах. Я получаю сообщение об ошибке, когда данные в другой таблице пусты.

В приведенном ниже примере я сохранил все user_id в массиве с именем $user_data. Затем я хотел бы добавить к существующему массиву и добавить дополнительную информацию, такую ​​​​как first_name, last_name и адрес электронной почты, для того же 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)) в этот файл, и пока он работает нормально.


person Cryssie    schedule 14.10.2014    source источник
comment
можете ли вы сказать строку, в которой идет уведомление: неопределенный индекс?   -  person stackMonk    schedule 14.10.2014
comment
Привет! Заявление должно быть подготовлено только один раз! Переместите $statement_get_data = $DB_3308->link->prepare($sql_get_user_data); за пределы цикла foreach.   -  person php-dev    schedule 14.10.2014
comment
@stackMonk - это другой файл php, где я вывожу результат. Если у меня 7 user_id и только у 6 есть данные, последний без данных выдаст мне ошибку. Остальные 6 будут воспроизводиться без проблем.   -  person Cryssie    schedule 14.10.2014


Ответы (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'] всегда установлен

Надеюсь, это решит вашу проблему

person Sohail Yasmin    schedule 14.10.2014
comment
На самом деле Sohail, я попробовал isset($row['first_name']) && !empty($row['first_name']) && ($row['first_name']) != ... но выдает ту же ошибку. - person Cryssie; 14.10.2014
comment
для отладки вашей переменной используйте var_dump($row['first_name']); - person Sohail Yasmin; 14.10.2014

пожалуйста, измените код во втором блоке кода, который является этим

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

поскольку количество необходимых параметров равно одному и предоставляется два
два типа
i для целого числа и
s для строки

поэтому измените эту строку на

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

пожалуйста, посмотрите меню php о bind_param

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

person kannetkeifer    schedule 14.10.2014
comment
На самом деле это была опечатка с моей стороны. Это все еще не работает после изменения параметра. - person Cryssie; 14.10.2014