2014-10-14 5 views
2

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

В этом примере ниже я сохранил все 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; 
     } 
    } 
} 

Как видно из второй части кода, я стараюсь, чтобы проверить, если данные будут установлены и не пусто и добавить сообщение, если он пуст. Я все еще получаю сообщение об ошибке «Уведомление: неопределенный индекс». Что я сделал здесь неправильно?

EDIT: На самом деле $ 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

Вы можете указать строку, на которой уведомление: «неопределенный индекс» - comi нг? – stackMonk

+0

Эй! Заявление должно быть подготовлено только один раз! Переместите команду '$ statement_get_data = $ DB_3308-> link-> prepare ($ sql_get_user_data);' вне цикла 'foreach'. –

+0

@stackMonk - он находится в другом файле php, где я выводя результат. Если у меня есть 7 user_id и только 6 имеют данные, последний без данных даст мне ошибку. Остальные 6 будут эхо без проблем. – Cryssie

ответ

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'] всегда устанавливаются

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

+0

На самом деле Sohail, я попробовал isset ($ row ['first_name']) &&!empty ($ row ['first_name']) && ($ row ['first_name'])! = "" ... но это дает мне такую ​​же ошибку. – Cryssie

+0

для отладки вашей переменной, что у вас в ней, используется var_dump ($ row ['first_name']); –

0

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

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

поскольку количество параметров эр нужен только один и поставляются два
два типа
я для целых и
S для строки

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

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

см РНР menual о bind_param

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

+0

На самом деле это была опечатка на моем конце. После изменения параметра он по-прежнему не работает. – Cryssie

+0

Можете ли вы предоставить мне точное сообщение об ошибке? – kannetkeifer

Смежные вопросы