2015-02-11 66 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