php - 如果参数有值则更新记录 - SQL, PHP

标签 php mysql

我当前的代码更新所有值,如果参数为空,它会将表中的相应字段更新为空。我只想更新有值的字段。

这是我的代码:

$sql = "
    UPDATE drinks SET
    name        = :name,          // Mojito -> Update it
    description = :description,   // Lorem ipsum.. -> Update it
    glass_id    = :glass_id,      // NULL -> do not update
    video_url   = :video_url      // NULL -> do not update
    WHERE id = '$drinkId'
";

try {
    $db = new db();
    $db = $db->connect();
    $stmt = $db->prepare($sql);
    $stmt->bindParam(':name', $drinkName);
    $stmt->bindParam(':description', $description);   
    $stmt->bindParam(':glass_id', $glassId);
    $stmt->bindParam(':video_url', $videoUrl);
    $stmt->execute();



// Close databse
$db = null;


} catch(PDOException $e) {
    echo $e;
}

最佳答案

您不想在这 2 个字段为空时更新它们。

这段代码检查一个字段是否为空,只有当它不为空时,它才会将该字段添加到查询中,绑定(bind)值也是如此。

$sql = 'UPDATE drinks SET';
$sql = sql . 'name = :name,';
$sql = sql . 'description = :description';

if (!is_null($glassId))
    $sql = sql . ',glass_id = :glass_id';

if (!is_null($videoUrl))
    $sql = sql . ',video_url = :video_url';

$sql = sql . ' WHERE id = :drinkId';

try {
    $db = new db();
    $db = $db->connect();
    $stmt = $db->prepare($sql);
    $stmt->bindParam(':name', $drinkName);
    $stmt->bindParam(':description', $description);
    $stmt->bindParam(':drinkId', $drinkId);

    if (!is_null($glassId))
    $stmt->bindParam(':glass_id', $glassId);

    if (!is_null($videoUrl))
    $stmt->bindParam(':video_url', $videoUrl);

    $stmt->execute();

    // Close databse
    $db = null;


} catch(PDOException $e) {
    echo $e;
}

关于php - 如果参数有值则更新记录 - SQL, PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553472/

相关文章:

php - 使用 WordPress REST API 通过 AJAX 更改密码

php - 无法从 linux 中的 php 访问我的 Dropbox 帐户

php - PHP将PDO对象传递给类

mysql - spring boot 1.5.2 和 EntityScan 有冲突

mysql - MySQL 中是否存在重复键违规?

mysql - Laravel 从具有多对多关系的两个表中获取数据

php - 我可以在 Laravel 4 中发送更多参数作为 return Redirect::to() 吗?

php - 使用 PHP 将 Google map 保存为 jpeg?

php - Ratchet PHP : How to mention host name?

mysql - 在mysql中获取列名作为别名时从表中选择*