Basicaly我试图尝试的是...如果Room_id和User_id不存在,我正在尝试存储数据。并且如果exsist更新...每当我运行以下提到查询我获得25行输入每行中相同的数据...当我试图更新其不工作...我在我的表单页面上使用数组。
function room_insert_data($room_insert_data) {
global $session_user_id;
$updates = array();
array_walk($room_insert_data, 'array_sanitize');
foreach($room_insert_data as $bfield=>$bdata) {
$field = '`' . implode('`, `', array_keys($room_insert_data)) . '`';
$data='\'' . implode('\', \'', $room_insert_data) . '\'';
$updates[] = '`' . $bfield . '` = \'' . $bdata . '\'';
if($room_insert_data['room_id'] == false) {
mysql_query("INSERT INTO `room_type` ($field) VALUES ($data)") or die(mysql_error());
} else {
mysql_query("UPDATE `room_type` SET " . implode(', ', $updates) . " WHERE `room_id` = '$room_id' AND `user_id` = '$user_id'") or die(mysql_error());
}
}
}
如果有人可以在这里帮助我,那么会不会...或者只是让我知道为什么我得到了25行入口1 ...
答案 0 :(得分:2)
您在循环中对$ room_insert_data的值进行了内爆...即,您正在使用1个查询中的每个值,但您要为$ room_insert_data中的每个字段重复INSERT查询。看起来你需要循环来构建$ updates数组,但你不应该包括在该循环中运行查询。
看起来你真正想做的就是:
function room_insert_data($room_insert_data) {
array_walk($room_insert_data, 'array_sanitize');
if(empty($room_insert_data['room_id'])) {
$field = '`' . implode('`, `', array_keys($room_insert_data)) . '`';
$data='\'' . implode('\', \'', $room_insert_data) . '\'';
mysql_query("INSERT INTO `room_type` ($field) VALUES ($data)") or die(mysql_error());
} else {
$updates = array();
foreach($room_insert_data as $bfield=>$bdata) {
$updates[] = '`' . $bfield . '` = \'' . $bdata . '\'';
}
$room_id = $room_insert_data['room_id'];
$user_id = $room_insert_data['user_id'];
mysql_query("UPDATE `room_type` SET " . implode(', ', $updates) . " WHERE `room_id` = '$room_id' AND `user_id` = '$user_id'") or die(mysql_error());
}
}
答案 1 :(得分:0)
在构建UPDATE
查询时,您应该仅在数组上循环。你得到了25个插入,因为你的表中有25列,当你循环遍历所有列时,你正在进行INSERT
。并且UPDATE
无法正常工作,因为您正在为每列重复执行此操作,而不是正确初始化数组。
if ($room_insert_data['room_id'] == false) {
$field = '`' . implode('`, `', array_keys($room_insert_data)) . '`';
$data='\'' . implode('\', \'', $room_insert_data) . '\'';
mysql_query("INSERT INTO `room_type` ($field) VALUES ($data)") or die(mysql_error());
} else {
$updates = array();
foreach($room_insert_data as $bfield=>$bdata) {
$updates[] = '`' . $bfield . '` = \'' . $bdata . '\'';
}
mysql_query("UPDATE `room_type` SET " . implode(', ', $updates) . " WHERE `room_id` = '$room_id' AND `user_id` = '$user_id'") or die(mysql_error());
}