我創建了一個只有私有成員變量和getter/setter函數稱爲User
類的私有成員變量bindParam識字通過類
class User {
private $m_id;
private $m_firstname;
private $m_lastname;
public function get_firstname() { return $this->m_firstnmae; }
public function set_firstname($firstname) { $this->m_firstname = $firstname; }
...
}
所以print_r($user)
會給我這樣的事情:
User Object
(
[m_id:User:private] => 2725
[m_firstname:User:private] => Alan
[m_lastname:User:private] => Turing
)
現在我使用PDO將對象插入到數據庫中(我將跳過連接部分,因爲它正在工作而不是問題的一部分)。這裏我的功能是插入數據:
function insert($user)
{
$insert_query = "insert into table (id,firstname,lastname) values (:id, :firstname, :lastname)";
try
{
$stmt = $this->m_pdo->prepare($insert_query);
$stmt->bindParam(':id', $user->get_id());
$stmt->bindParam(':firstname', $user->get_firstname());
$stmt->bindParam(':lastname', $user->get_lastname());
$stmt->execute();
return true;
}
catch (PDOException $ex)
{
echo $this->m_error_message = $ex->getMessage();
return false;
}
}
也適用。但是,當我將php error_reporting更改爲E_ALL | E_STRICT
(它也顯示運行時嚴格警告)時,插入代碼會爲bindParam
行生成警告strict standards only variables should be passed by reference
。問谷歌之後,我發現,很明顯,我必須這樣做2個步驟:
$id = $user->get_id()
$stmt->bindParam(':id', $id);
它們轉換成新的格式後,一切正常,沒有任何警告。
事情是,我的原始User-class
比20個私人成員變量更大,我也有其他類。所以我在想迭代變量並將它們保存在一個數組中,並將它們作爲數組。但後來我面臨的問題foreach
只能通過公共變量循環,但不是私人的...所以我的問題,現在:
- 是有可能
bindParam
與循環莫名其妙結合? - 如果是這樣,我怎樣才能循環訪問私有成員變量並保存它們?
爲了方便,我在每個地方都使用相同的命名格式。即在數據庫中列有firstname
必須在User-class
對方m_firstname
與get_firstname()
和set_firstname($firstname)
作爲的getter/setter
我認爲你應該使用'公共BOOL PDOStatement對象::雙ndValue(mixed $ parameter,mixed $ value [,int $ data_type = PDO :: PARAM_STR])'而不是** bindParam **,並保持你的getters ... –
只需使用'bindValue' –