Php 更新变量不为空的行中的SQL数据库

Php 更新变量不为空的行中的SQL数据库,php,mysql,sql,database,Php,Mysql,Sql,Database,我想创建一个简单的SQLUPDATE查询,它可以通过IF语句检查传递的POST变量是否为空。如果为空,则不会修改原始值,如果不是,则更新。我只是不知道我以前是怎么做的 应该是这样,但不起作用: $sql = "UPDATE Clients SET Name = IF(" . $_POST['edit_client_name'] . " = '', Name, " . mysqli_real_escape_string( $this -> link, $_POST['edi

我想创建一个简单的SQL
UPDATE
查询,它可以通过
IF
语句检查传递的POST变量是否为空。如果为空,则不会修改原始值,如果不是,则更新。我只是不知道我以前是怎么做的

应该是这样,但不起作用:

$sql = "UPDATE Clients SET Name = IF(" . $_POST['edit_client_name'] .
    " = '', Name, " .
    mysqli_real_escape_string( $this -> link,  $_POST['edit_client_name'] ) .
    " WHERE Id=" . $_GET['selected_client'] . "";

您需要在应用程序而不是查询中选中此项。像

if(isset($_POST['edit_client_name'])){

  $name = mysqli_real_escape_string( $this -> link,  $_POST['edit_client_name'] );
  $id = mysqli_real_escape_string( $this -> link, $_GET['selected_client'] );
  mysqli_query("UPDATE Clients SET Name = '".$name."' WHERE Id=".$id."');

} 

您可以通过SQL进行调整,而不是在DB中进行检查

我跳过了SQL注入预防部分

<?php
if(empty($_POST['edited_client_name'])){
    $namequery = '';
}
else{
    $namequery = "Name = '".$_POST['edited_client_name']."'";
}

$sql = "UPDATE Clients SET ".$namequery." WHERE ID = ".$_GET['selected_client'];

echo $sql;
?>
当提供编辑的客户名称时

其他返回:

UPDATE Clients SET WHERE ID = 1

希望这能让您了解如何处理代码。

不要在数据库中执行该检查。检查应用程序中的有效输入数据。为什么要在SQL查询中执行此操作?如果数据库不应该更新,那么甚至不要调用SQL查询。连接到数据库只是为了告诉它不要更新自己,这是一种资源浪费。我想用多行,因此,如果用户不填写其中一个不会被覆盖的输入。@Isty001:动态生成查询而不是在查询本身中执行此检查可能会容易得多。此外,您的代码很容易受到SQL注入攻击,这可能会导致许多其他问题。你真的不应该在数据库中以代码的形式执行用户输入。我总是使用转义来防止它,现在我只是在测试最短的方法。但关键是我想用多行/变量来执行。我应该逐个检查和查询它们吗?@Isty001:只有一个值
$\u POST['edit\u client\u name']
-如果设置了,您可以执行
更新来写入多行,如果您愿意的话。没有问题,您可以这样做:如果($\u POST){}现在您可以将所有POST变量分配给每个php变量,而不是在查询中使用的变量。
UPDATE Clients SET WHERE ID = 1