如何使用swift中的特定字段dbAccess更新特定记录

时间:2016-05-13 05:38:51

标签: ios swift orm dbaccess

我遇到更新现有记录(DBAccess ORM)的问题。 我想用特定字段“ ID ”更新特定记录。

请查看以下快速代码。

func updatePostDataById(Post_id: NSNumber, updatedName:String, updatedCity:String){

    let objPost = Post();

    objPost.Id = Post_id;
    objPost.name = updatedName;
    objPost.city = updatedCity;

    objPost.commit();
}

当我尝试以这种方式更新记录时。然后它在“发布”表中生成新记录。

请提出解决此问题的完美解决方案。

1 个答案:

答案 0 :(得分:0)

OPs示例将始终创建一个新对象,因为他们使用以下方法创建一个全新的对象:

<?php //Post Params 
    $txt_studid ='RU010/08' ;//trim($_POST['txt_studid']);  
    $cost_year =1 ;//trim($_POST['status']);  
    $txt_tution = 700;//trim($_POST['txt_tution']);  
    $txt_food = 600;//trim($_POST['txt_food']);  
    $txt_accom = 500 ;//trim($_POST['txt_accom']);  
?>

<?php //Query 

    $pdo = new PDO('mysql:host=localhost;dbname=erca_db', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $stmt = $pdo->prepare("INSERT INTO st_costshare(stud_id, template_id, Tuition_fee, food_fee, Accomod_fee)
    VALUES(:studid, :cost_id, :tution, :food, :accomod");
        $stmt->bindValue(":studid", $txt_studid);
        $stmt->bindValue(":cost_id", $cost_year);
        $stmt->bindValue(":tution", $txt_tution);
        $stmt->bindValue(":food", $txt_food);
        $stmt->bindValue(":accomod", $txt_accom);
        $stmt->execute();
    } catch (PDOException $e) {
        echo "DataBase Error: The user could not be added.<br>".$e->getMessage();
    } catch (Exception $e) {
        echo "General Error: The user could not be added.<br>".$e->getMessage();
    }

    if ($stmt->rowCount()>0) {
        echo "success";
    } else {
        echo "failed";
    }
?>

要更新记录,您需要保留原始对象,为此,您可以查询它,或使用其中一个快捷方式:

let objPost = Post();

或稍短的版本将是:

let objPost = Post.query().whereWithFormat("Id = %@", withParameters: [Post_id]).limit(1).fetch().firstObject;

本质上是相同的查询。

这两个方法都将返回一个现有对象,无论何时将其提交到数据库中,都将替换现有对象。

由于 阿德里安