PHP массив в MySQL BD ... пропущенные поля массива - PullRequest
0 голосов
/ 09 января 2012

нужна ваша помощь.

Мне нужно обновить данные массива в таблице mysql. Моя проблема в том, что есть некоторые значения массива, которые не имеют столбца «фото» (проверьте 4-е поле в массиве), потому что мой запрос не выполняется с ошибкой «Число столбцов не соответствует количеству значений в строке 1» ниже то, что я пытаюсь

    $dept = $job->user();
$sql = array(); 
    foreach( $dept as $row ) {
       $sql[] = '('.$row['dob'].', "'.($row['name']).'", "'.($row['role']).'"
 "'.$row['email'].'", "'.($row['photo']).'" )';
    }
    mysql_query('INSERT INTO cast (dob, name, role, email, photo) VALUES '.implode(',', $sql)) or die(mysql_error());

Массив данных

array
  0 => 
    array
      'dob' => string '01121978'
      'name' => string 'Ram Avtar'
      'role' => string 'Inspector'
      'email' => string 'ramavtar@gmail.com'
      'photo' => string ' '
  1 => 
    array
      'dob' => string '15021978'
      'name' => string 'Suresh Babu'
      'role' => string 'Constable'
      'email' => string 'ssbh1@mail.yahoo.com'
      'photo' => string ' ' 
  2 => 
    array
      'dob' => string '11111965'
      'name' => string 'Dean'
      'role' => string 'Inspector'
      'email' => string 'ddepth@live.in'
      'photo' => string ' '
  3 => 
    array
      'dob' => string '10061979'
      'name' => string 'Rohit Shette'
      'role' => string 'Sergeant'
      'email' => string ' '
      'photo' => string ' '
  4 => 
    array
      'dob' => string '15081979'
      'name' => string 'Ian'
      'role' => string 'warden'
      'email' => string ' '

структура стола

 CREATE TABLE user(
      id INT(5) NOT NULL AUTO_INCREMENT,
      dob TEXT NOT NULL,
      name TEXT NOT NULL,
      role TEXT DEFAULT NULL,
      email TEXT DEFAULT NULL,
      photo TEXT DEFAULT NULL
    )
    ENGINE = INNODB
    CHARACTER SET latin1
    COLLATE latin1_swedish_ci;

Ответы [ 2 ]

1 голос
/ 09 января 2012

Проблема в том, что вы пропустили запятую.

Изменение:

echo $sql[] = '('.$row['dob'].', "'.($row['name']).'", "'.($row['role']).'"
  "'.$row['email'].'", "'.($row['photo']).'" )';

Кому:

$sql[] = "('{$row['dob']}', '{$row['name']}', '{$row['role']}',
 '{$row['email']}', '{$row['photo']}')";                  // ^^^  Here is the missing comma

Отсутствующие значения не вызовут проблемы, они просто приведут к вставке пустой строки, потому что строка заключена в кавычки. Тем не менее, вы можете проверить, чтобы убедиться, что ключ существует в массиве массива, прежде чем пытаться его использовать, чтобы избежать любых неприятных E_NOTICE s.

Кроме того, убедитесь, что вы правильно экранировали свои данные, прежде чем использовать их в запросе - вам не нужно посещать таблицы Бобби ...

0 голосов
/ 09 января 2012

Во-первых - если это ваш настоящий код, я думаю, вы пропустили запятую после $row['role'].Кроме того - почему бы не проверить, существует ли ключ массива?

Попробуйте что-то вроде (не проверено, просто чтобы дать вам представление)

$dept = $job->user();
$sql = array(); 
    foreach( $dept as $row ) {
       echo $sql[] = '('
       . (array_key_exists('dob', $row) ? $row['dob'] : 'null') . ', "'
       . (array_key_exists('name', $row) ? $row['name'] : 'null') . '", "'
       . (array_key_exists('role', $row) ? $row['role'] : 'null') . '", "'
       . (array_key_exists('email', $row) ? $row['email'] : 'null') . '", "'
       . (array_key_exists('photo', $row) ? $row['photo'] : 'null') . '" )';
    }
    mysql_query('INSERT INTO cast (dob, name, role, email, photo) VALUES '.implode(',', $sql)) or die(mysql_error());
...