Php 在MySQLI中更新参数

Php 在MySQLI中更新参数,php,mysql,Php,Mysql,我正在尝试更新mySql数据库中的一行。但是,我只想更新不为null的特定参数: db->prepare("UPDATE table SET userFirstName = $userFirstName, userLastName = $userLastName WHERE xx = $xx"); 这就是我现在所做的,但可能是userFirstName不需要更新,或者userLastName,。。。因为我有可能的价值观,所以我需要一种方式来表达: 如果userLastName不为“nul

我正在尝试更新mySql数据库中的一行。但是,我只想更新不为null的特定参数:

db->prepare("UPDATE table SET userFirstName = $userFirstName, userLastName = $userLastName WHERE xx = $xx");
这就是我现在所做的,但可能是userFirstName不需要更新,或者userLastName,。。。因为我有可能的价值观,所以我需要一种方式来表达:


如果userLastName不为“null”,那么即使…

MySQL足够聪明,可以决定是否更新该行,也要进行更新。如果它看到要更新的值与列中当前的值匹配,它将跳过重写它,即使它没有,也不是您真正应该关心的事情。我自己也有很多这样的优化困扰,我可以从经验告诉你,它们不会给你带来任何好处

您的代码有一个更大的问题。你使用
prepare
是毫无意义的。您的SQL仍然易受攻击。搜索准备好的语句和mysql注入


然而,要按原样回答这个问题,您应该使用对象作为数据库映射器。它们让你的生活变得轻松多了。其基本思想是,您有一个表示表中一行的对象,然后它跟踪哪些属性已被修改,当您调用
$object->save()
时,它确切地知道要更新哪些字段。

使用外部变量构建SQL语句会使您的代码容易受到SQL注入攻击。此外,任何带有单引号的输入数据,如“O'Malley”,都会破坏您的查询。了解参数化查询,最好使用PDO模块,以保护您的web应用程序。有很多详细的例子。另见备选方案和危险说明。运行使用外部数据构建的SQL代码就像在家门口吃由配料制成的汤。感谢您的回复,但是此代码是在方法中运行的,方法调用应该指定更新参数。当我调用该方法时,我可能只想更新用户名,所以我将其他用户名设置为null。这是唯一的办法…@Alessandro那么问题出在哪里?