我想要实现的是,如果已经付款,则为客户订阅添加30天
所以我正在使用此代码
$set = "REPLACE into CLIENTS where USR_PAID = '1' and USR_EXPIRATION = DATE(DATE_ADD(NOW(), INTERVAL 0 DAY)) values ('USR_EXPIRATION','" . $due . "')";
$update = $conn->update($set, $db);
我收到以下语法错误
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的“USR_PAID ='1'和USR_EXPIRATION = DATE(DATE_ADD(NOW(),INTERVAL 0 DAY))'附近使用正确的语法 声明: 更换为客户,其中USR_PAID ='1'且USR_EXPIRATION = DATE(DATE_ADD(NOW(),INTERVAL 0 DAY))值('USR_EXPIRATION','09 -05-2013')
我应该告诉你,我正在使用相同的功能在网站的不同部分更新数据库,并且工作正常。
此外,以下查询正在运行,并为我提供了今天已付款并已过期的所有客户:
$request = "select * from CLIENTS where USR_PAID = '1' and USR_EXPIRATION = DATE(DATE_ADD(NOW(), INTERVAL 0 DAY))";
$result = $conn->query($request, G_NORMDB);
我想这只是一个我无法弄清楚的语法错误。
答案 0 :(得分:1)
您的REPLACE语法错误。价值观,然后在哪里。
$set = "REPLACE into CLIENTS (the two columns here) VALUES ('USR_EXPIRATION','" . $due . "') where USR_PAID = '1' and USR_EXPIRATION = DATE(DATE_ADD(NOW(), INTERVAL 0 DAY))";
有关详细信息,请参阅enter link description here了解更多信息。
编辑:我很好奇没有在文档中看到WHERE。根据{{3}},REPLACE没有WHERE子句。请改用UPDATE。
答案 1 :(得分:1)
在旁注中,我认为无论如何这都行不通,您无法使用replace into
来有选择地更改列。
以下是手册的解释:
所有列的值都取自中指定的值 REPLACE声明。任何缺少的列都设置为默认值 值,就像INSERT一样。你不能引用来自的值 当前行并在新行中使用它们。
所以你冥想包括整个用户行。
我认为使用此查询更容易:
$ q =“UPDATE CLIENTS
SET USR_EXPIRATION
='$ due'WHERE`USR_PAID ='1'和USR_EXPIRATION = DATE(DATE_ADD(NOW(),INTERVAL 0 DAY))”;
$ update = $ conn-> update($ q,$ db);
让我知道这对你有什么用,如果有的话。
答案 2 :(得分:-1)
如何遵循错误消息中的建议 - 检查有关REPLACE query?的语法的Mysql手册