我遇到更新现有记录(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();
}
当我尝试以这种方式更新记录时。然后它在“发布”表中生成新记录。
请提出解决此问题的完美解决方案。
答案 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;
本质上是相同的查询。
这两个方法都将返回一个现有对象,无论何时将其提交到数据库中,都将替换现有对象。
由于 阿德里安