PHP SQL UPDATE 仅当发布数据具有使用 COALESCE() 给出的输入时

标签 php mysql insert coalesce

嘿伙计们,我读过很多关于此的帖子(非常旧),并且我已经尝试了其中的所有内容,但我似乎无法找出问题所在..

所以我有一个用于更新表记录的表单。但是如果没有输入名称,那么它不会保留原始名称并更新其余部分,它只是用空字符串替换它。

我尝试过使用 COALESCE() 但它无法将我的 php 代码中的任何内容识别为 NULL 值。

如果我不加引号 '',那么我会收到 SQL 错误,但如果我这样做,它不会被识别为 null..

例如,如果我通过 ssh 登录并运行 MySQL 并输入..

选择合并('','测试');

那么 MySQL 只显示空字符串,而不显示其中包含内容的字符串。

似乎无法在没有引号问题的情况下使用后变量进行查询。

这是我的代码...

/* Original query that replaces with empty input feilds...
$update = "UPDATE KIT202_product SET Name='". $_POST['name']
. "', Price='". $_POST['price']
. "', Description='". $_POST['desc']
. "' WHERE ID=". $_POST['id'];
*/

//What I ended up trying but still doesn't work :(...
$name=NULL;
if (!empty($_POST['name'])) $name="'". $_POST['name']. "'";
$price=NULL;
if (!empty($_POST['price'])) $price="'". $_POST['price']. "'";
$desc=NULL;
if (!empty($_POST['desc'])) $desc="'". $_POST['desc']. "'";

这不起作用,因为 null 只传递任何内容而不是 NULL,因此它就像仅使用 1 个值运行合并。

最佳答案

如果您做两件事会怎样:1)为您的字段创建一个小型验证函数; 2) 拆分更新,仅更新已通过验证的内容。 因此,松散地:

$updatePrefix = "UPDATE KIT202_product SET ";
$updateSuffix = "WHERE ID=". $_POST['id']; // You should first these for injection

$conditions = '';
if (isValid($_POST['name'])) $conditions .= " Name='".$_POST['name']."'";
if (isValid($_POST['price'])) {
   if ($conditions != '') $conditions .= ', ';
   $conditions .= " Price= '".$_POST['price']."'";
}
if (isValid($_POST['desc'])) {
    if ($conditions != '') $conditions .= ', ';
    $conditions .= " Description= '".$_POST['desc']."'";
}

if ($conditions != '') $query = $updatePrefix . $conditions . $updateSuffix;

function isValid($input) {
    return (!(empty($input) && $input == ''));
}

这应该可以满足您的需要。

更新:回答您的评论,是的,您可以使用 COALESCE。尝试这样的事情:

$name=NULL;
if (!empty($_POST['name'])) $name="'". $_POST['name']. "'";
$price=NULL;
if (!empty($_POST['price'])) $price="'". $_POST['price']. "'";
$desc=NULL;
if (!empty($_POST['desc'])) $desc="'". $_POST['desc']. "'";
$update = "UPDATE KIT202_product SET Name=COALESCE($name, KIT202.Name)"
. "', Price=COALESCE($price,KIT202.Price)"
. "', Description=COALESCE($desc, KIT202.Description)"
. "' WHERE ID=". $_POST['id'];

关于PHP SQL UPDATE 仅当发布数据具有使用 COALESCE() 给出的输入时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36486136/

相关文章:

java - 准备好的语句 SQL 错误

php - 在php中访问关联数组中的第一个元素

java - 使用 DEFAULT id 的 INSERT 在 PostgreSQL 中不起作用

c++ - 迭代器与指针的双端队列插入失效(引用)

c# - 如何在 datagridview 中插入新的 datagridview 行并在数据库中(自动)更新?

php - 如何使用 PHP 和 GD 获取以字节为单位的图像资源大小?

php - PHP中的关键字分析

php - 使用 pthreads 在 PHP 中创建异步超时

php - 解析 URL 路径的特定段的最有效方法是什么?

mysql - MariaDB - 无法通过 my.cnf 设置 max_connections