2015-02-11 80 views
0

我正在嘗試更新mySql數據庫中的一行。不過,我只想要更新的特定參數,這些參數不爲空:在MySQLI中更新參數

db->prepare("UPDATE table SET userFirstName = $userFirstName, userLastName = $userLastName WHERE xx = $xx"); 

這就是我現在做的,但它可能是USERFIRSTNAME並不需要更新,或USERLASTNAME,......因爲我有可能值我需要一種方法來這樣說:

如果USERLASTNAME不是「空」,那麼更新甚至是......

+0

**使用外部變量構建SQL語句會使您的代碼容易受到SQL注入攻擊**另外,任何帶有單引號的輸入數據(如「O'Malley」)都會炸掉您的查詢。瞭解參數化查詢,最好使用PDO模塊來保護您的Web應用程序。 [這個問題](http://stackoverflow.com/questions/60174)有很多詳細的例子。另見http://bobby-tables.com/php查找危險的替代品和解釋。運行使用外部數據構建的SQL代碼就像在家門口發現用成分製成的湯一樣。 – 2015-02-11 20:03:59

回答

2

MySQL是足夠聰明,以確定是否更新該行還是不行。如果它看到要更新的值與列中當前的值相匹配,它將跳過重寫它,即使它沒有,它也不是你應該關心的東西。我自己有很多這些優化的癖好,我可以從經驗告訴你,他們不會給你帶來任何好處。

您的代碼存在更大的問題。您使用prepare是毫無意義的。你的SQL仍然很脆弱。搜索準備好的語句和mysql注入。

但是,要回答這個問題,你應該使用一個對象作爲數據庫映射器。他們讓你的生活變得更加輕鬆。基本上這個想法是,你有一個代表你的表的一行的對象,然後它跟蹤哪些屬性已被修改,並且當你調用$object->save()時,它確切知道要更新哪些字段。

+0

感謝您的回覆,但是此代碼在方法中運行,並且方法調用應該指定更新參數。當我調用方法時,我可能只想更新用戶名,所以我將其他設置爲null。那是唯一的方法... – Alessandro 2015-02-12 00:13:35

+0

@Alessandro那麼問題是什麼? – 2015-02-12 10:17:59