0

我正在尝试设置一个函数,该函数将动态更新数据库中的对象属性,而无需更新整个对象。

$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' 这是一个简单的例子

4

2 回答 2

2

您不需要使用 eval 执行此操作。PHP 支持变量变量: http: //php.net/manual/en/language.variables.variable.php

所以这会做:

$this->$attributes

注意第二个$标志。这基本上意味着 $attributes 的值用作属性名称。如果你想让它写得更清楚一点,你可以使用括号来做到这一点:

$this->{$attributes}

如果您想使用数组执行此操作,或者如果您想使用多个变量来构建变量名称,则需要此括号:

$this->{$var1}_{$array[0]}_{$var2}

这可能超出了这个问题的范围,但很高兴知道什么是可变变量。但我不推荐使用它们,因为它使代码不可读且难以理解。

于 2013-02-14T14:15:49.613 回答
1

没有必要使用eval()

$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . $this->attribute . "'";
$sql .= " WHERE ...";

如果attribute是变量,请使用:

$this->$attribute

你确定$this->attribute消毒正确吗?

于 2013-02-14T14:16:34.177 回答