2013-02-14 26 views
0

我想設置一個函數,它將動態更新數據庫中的對象屬性,而不會更新整個對象。php使用eval獲取對象屬性值

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

我似乎無法得到這個的eval( 「\ $本 - > $屬性;」)以便產生物體的屬性值。該屬性中有一個值,它是一個公共屬性。

感謝

$屬性是一個函數VAR將包含像 'ADDRESS_ID' 所以我想一個字符串 UPDATE TABLE_NAME SET ADDRESS_ID = '11' WHERE user_ID的= '1' 這是它的一個簡單的例子

+8

爲什麼你需要'eval()'它?當然'$ this->屬性'就足夠了? – BenM 2013-02-14 14:13:52

+0

爲什麼您需要首先使用eval?爲什麼不簡單地使用$ this->屬性? – 2013-02-14 14:14:12

+0

幾乎在任何時候使用'eval()',學會使用Prepared語句 – 2013-02-14 14:16:07

回答

2

你不需要使用eval來做到這一點。 PHP支持可變的變量:http://php.net/manual/en/language.variables.variable.php

因此,這將做到:

$this->$attributes 

注二等$跡象。這基本上意味着$ attributes的值被用作屬性名稱。如果你想讓它寫更清楚一點,你可以這樣做,使用括號:

$this->{$attributes} 

,如果你想這樣使用數組,或者如果你想使用多個變量來建立一個變量名做這個支架是必需的像這樣:

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

這可能落後於這個問題的範圍,但它很好地知道變量變量是什麼。但我不推薦使用它們,因爲它會使代碼難以理解並且難以理解。

1

有沒有必要使用eval()

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

如果attribute是一個變量,使用:

$this->$attribute 

確定$this->attribute正確消毒?

+1

我認爲它應該是這樣的 ''「。$ this-> attribute。」''' – 2013-02-14 14:18:22

+0

如果它是一個變量變量,則不應該。 – BenM 2013-02-14 14:19:03

+1

您忘記了第一個連接點'.' – MarcDefiant 2013-02-14 14:23:50