PHP数组到mysql DB ...缺少数组字段

时间:2012-01-08 21:59:47

标签: php mysql arrays insert

需要你的帮助。

我需要更新mysql表中的数组数据。我的问题是有些数组值没有“photo”coloum(检查数组中的第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 个答案:

答案 0 :(得分:1)

实际问题是你错过了一个逗号。

变化:

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

此外,请确保在查询中使用数据之前正确转义数据 - 您不希望访问Bobby Tables ...

答案 1 :(得分:0)

首先 - 如果这是你的真实代码,我认为你在$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());