查询Insering 25行而不是1具有相同的数据

时间:2013-12-26 17:42:49

标签: php

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 ...

2 个答案:

答案 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());
}