2016-08-14 17 views
0

Я пытаюсь сделать функцию пакетной загрузки, чтобы добавить пользователей в базу данных. У меня есть функция, которая добавляет детали одного пользователя к БД, и я вызвать его из внутри цикла в то время, который считывает из листа Excel:Нет результата mysqli внутри цикла while для пакетной загрузки

$excel = new Spreadsheet_Excel_Reader(); 
$excel->read($target_file); 

     $company = mysql_prep($_POST["company"]); 

while($x<=$excel->sheets[0]['numRows']) { 
      $username = isset($excel->sheets[0]['cells'][$x][1]) ? $excel->sheets[0]['cells'][$x][1] : ''; 
      $email = isset($excel->sheets[0]['cells'][$x][2]) ? $excel->sheets[0]['cells'][$x][2] : ''; 

      //generate random password 
      $password = generate_random_password(); 

      //hash the password 
      $hashed_password = password_encrypt($password); 
      $status = "Employee"; 

      //save details in db 
      $result = add_single_user($username, $hashed_password, $email, $status, $company); } 

Функции add_single_user возвращает результат при вызове из вне этой петли, но не будет вставлять пользователя, как показано выше. Я проверил, что значения считываются считывателем Excel и назначаются. Вот функция:

function add_single_user($username, $hashed_password, $email, $status, $company){ 
global $connection; 
$safe_username = mysqli_real_escape_string($connection, $username); 
$safe_email = mysqli_real_escape_string($connection, $email); 
$safe_status = mysqli_real_escape_string($connection, $status); 
$safe_company = mysqli_real_escape_string($connection, $company); 

$query = "INSERT INTO users ("; 
$query .= " username, hashed_password, email, status, company"; 
$query .= ") VALUES ("; 
$query .= " '{$safe_username}', '{$hashed_password}', '{$safe_email}', '{$safe_status}', '{$safe_company}'"; 
$query .= ")"; 
$result = mysqli_query($connection, $query); 
return $result; 

}

+0

Простая отладка/устранение неполадок в первую очередь: перед выполнением mysqli_query эхо вашей строки запроса на ваш экран/браузер. Если он показывает sql, который вы ожидаете, - затем скопируйте/вставьте в окно php admin SQL и протестируйте его. – dbmitch

+0

@dbmitch Спасибо. Я попытался скопировать/вставить его раньше, но это гораздо лучший способ устранения неполадок. В одном из полей базы данных было ограничение, которое я не понимал. Очень признателен. – SeemsLegit57

ответ

0

Для запроса INSERT, mysqli_query должен возвращать либо true или false.

Предполагая, что $connection содержит объект для соединения БД, запрос должен работать (кроме фигурных скобок в части VALUES, которые, вероятно, будут вставлены в БД).

Try, чтобы увидеть, если mysqli_connect_error() или mysqli_error() общается ошибка в соединении или в запросе (Это хорошая практика в любом случае контролировать, если есть какая-либо ошибка при установлении соединения с БД и выполнением запросов).

Кроме того, я предлагаю вам использовать prepared statements вместо использования mysql_prep, real_escape_string и mysqli_query, поскольку они не эффективны против инъекций.

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

  • Нет связанных вопросов^_^