我正在尝试设置一个函数,它将动态更新数据库中的对象属性,而无需更新整个对象。
$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . eval("\$this->$attribute;") . "'";
$sql .= " WHERE ...";
我似乎无法获得此 eval(“\ $ this-> $ attribute;”)来生成对象属性值。属性中有一个值,它是一个公共属性。
由于
$ attribute是一个函数var,它将包含像'address_id'这样的字符串,所以我想要 UPDATE table_name SET address_id = '11'WHERE user_id ='1' 这是一个简单的例子
答案 0 :(得分:2)
您不需要使用eval执行此操作。 PHP支持变量变量:http://php.net/manual/en/language.variables.variable.php
所以这样做:
$this->$attributes
请注意第二个$
符号。这基本上意味着$ attributes的值用作属性名称。如果你想让它更清晰一些,你可以使用括号来表达:
$this->{$attributes}
如果您想使用数组执行此操作,或者如果您想使用多个变量来构建如下变量名称,则需要此括号:
$this->{$var1}_{$array[0]}_{$var2}
这可能落后于这个问题的范围,但知道变量变量是什么很好。但我不建议使用它们,因为它使代码难以理解且难以理解。
答案 1 :(得分:1)
无需使用eval()
:
$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . $this->attribute . "'";
$sql .= " WHERE ...";
如果attribute
是变量,请使用:
$this->$attribute
您确定$this->attribute
是否已正确消毒?