需要你的帮助。
我需要更新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;
答案 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());