php - 不要在 UPDATE 语句上使用空变量进行更新

标签 php mysql

我正在尝试运行 SQL 更新,但当帖子变量为空时我不想更新。

我运行的代码是:

require '../includes/db.php';
$settings_owner = ( isset($_POST[wb_owner_field]) ? $_POST[wb_owner_field] : false );
$settings_title = ( isset($_POST[wb_title_field]) ? $_POST[wb_title_field] : false );
$settings_description = ( isset($_POST[wb_descr_field]) ? $_POST[wb_descr_field] : false );
$settings_keywords = ( isset($_POST[wb_keywd_field]) ? $_POST[wb_keywd_field] : false );
$settings_id = ( isset($_POST[wb_id]) ? $_POST[wb_id] : false );

try {
    $sql = "UPDATE Website  SET  website_owner = '$settings_owner', website_title = '$settings_title', website_description = '$settings_description', website_keywords = '$settings_keywords' WHERE  _ID = '$settings_id'  ";

    // Prepare statement
    $stmt = $conn->prepare($sql);

    // execute the query
    $stmt->execute();

    // echo a message to say the UPDATE succeeded
    echo $stmt->rowCount() . " records UPDATED successfully";
} catch (PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;

最佳答案

一种方法是测试 UPDATE 语句中的值:

$sql = "UPDATE Website  
    SET  website_owner = IF('$settings_owner' = '', website_owner, '$settings_owner'), 
        website_title = IF('$settings_title' = '', website_title, '$settings_title'), 
        website_description = IF('$settings_description' = '', website_description, '$settings_description'), 
        website_keywords = IF('$settings_keywords' = '',  website_keywords, '$settings_keywords')
    WHERE  _ID = '$settings_id'  ";

另一种方法是动态构建 UPDATE 语句。

$sets = array();
if ($settings_owner != '') {
    $sets[] = "website_owner = '$settings_owner'";
}
if ($settings_title != '') {
    $sets[] = "website_title = '$settings_title'";
}
...
if (!empty($sets)) {
    $sql = "UPDATE Website SET " . implode(', ', $sets) . " WHERE _ID = '$settings_id'";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
}

关于php - 不要在 UPDATE 语句上使用空变量进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412858/

相关文章:

php - 需要一个可以由用户风格化并存储在数据库中同时考虑段落等的文本字段

php - PDO 连接间歇性缓慢

php - MySQL 搜索表的多列

mysql - 当值来自 case 语句时,无法对列中的值进行分组

mysql - 不知道如何选择按特定类型分类的电影

php - 将mysql转换为mysqli时出错

php - 如何从 PHP 检索变量到 Flex

php - Laravel:调用未定义函数 Symfony\Component\Console\mb_convert_variables()?

javascript - 如何操作 `get_price_html()` 函数?

php - 多对一关系,其中子实体用于 AJAX 文件上传