2012-01-08 45 views
0

需要您的帮助。PHP数组到MySQL BD ...缺少数组字段

我需要更新mysql表中的数组数据。我的问题是,有一些数组值没有“照片”coloum(检查数组中的第四个字段),因为我的查询失败,出现错误“列计数与第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 '[email protected]' 
     'photo' => string ' ' 
    1 => 
    array 
     'dob' => string '15021978' 
     'name' => string 'Suresh Babu' 
     'role' => string 'Constable' 
     'email' => string '[email protected]' 
     'photo' => string ' ' 
    2 => 
    array 
     'dob' => string '11111965' 
     'name' => string 'Dean' 
     'role' => string 'Inspector' 
     'email' => string '[email protected]' 
     '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; 
+0

你能证明你的真实所产生的SQL,PHP不产生呢? – zerkms 2012-01-08 22:11:59

回答

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 s。

另外,请您在查询中使用它之前一定要正确地逃脱你的数据 - 你不想从Bobby Tables访问...

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()); 
+0

您的代码将插入字符串'null'而不是空值。你需要将报价移动... – DaveRandom 2012-01-08 22:33:28

+0

谢谢你们,它的工作原理。我一直在想这是因为照片领域缺少价值。在查询时从未检查过。 – 2012-01-09 15:20:37

+0

需要1个更多的小帮助。在表中插入数组值之前,我想检查它是否存在。如果它不存在,比插入其他明智地跳过该数组。由于这张桌子与其他桌子有很多关系,所以我希望保持这种关系。名称是此表中的唯一键。 – 2012-01-09 17:52:14