2013-05-01 481 views
0

这里是我当前的查询如何使用if/else语句在UPDATE语句

UPDATE `records` SET tester1 = '$user', tester1yn = '$pass' 

我想什么来改变这是

UPDATE `records` SET 
IF `tester1` IS NULL `tester1` = $user, AND `test1` = $pass 
ELSE `tester2` = $user, `tester1yn` = '$pass' 
WHERE `id` = $id 

但正如我有这不起作用。我有一个嵌套的问题,或者我正在做这个错误的方式?

UPDATE意见的基础上

UDPATE records SET 
tester1 = if(tester1 IS NULL,'$user',tester1), 
tester1yn = if(tester1 is null, '$pass', tester1yn), 
tester2 = IF(tester1 is not null, '$user', tester2), 
tester2yn = IF(tester1 is not null,'$pass', tester2yn) 
where id = $id 

仍然还没有实现,但。

+0

编程_guessing_不起作用。阅读MySQL文档以了解其功能。请注意,查询是单个声明性语句,而不是过程函数。 – 2013-05-01 20:00:13

+0

可能重复的[MYSQL IF ELSE语句在查询?](http://stackoverflow.com/questions/8763310/mysql-if-else-statement-in-query) – 2013-05-01 20:00:31

+0

这是一个经典的MySQL注入示例,请参阅:http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php – 2013-05-01 20:01:06

回答

2

你在错误的方向样的标题,虽然这个逻辑应该在未来的布局了(在我看来)

尝试:

UPDATE records 
SET 
tester1 = if(tester1 IS NULL,$user,tester1), 
tester1yn = IF(tester1 IS NULL,$pass,tester1yn), 
tester2 = IF(tester1 IS NOT NULL, $user,tester2), 
tester2yn = IF(tester1 IS NOT NULL,'$pass',tester2yn) 
WHERE id = $id"; 
+0

更新到这个放置仍然无法正常工作。我在所有的php变量中加上“'”,开始于$ – 2013-05-01 20:21:20

+0

不得不切换测试顺序,使其正确工作。 – 2013-05-02 15:17:26

0

虽然在SQL中是可行的,但这种逻辑不应该发生在数据库级别。用户的登录,认证和管理(这似乎是你以后的)应该在你的代码中完成。

2

我没有测试这一点,所以不要抱着我,但这应该指向你在正确的方向:

UPDATE records 
SET 
    tester1 = CASE WHEN tester1 IS NULL THEN '$user' ELSE tester1 END, 
    test1 = CASE WHEN tester1 IS NULL THEN '$pass' ELSE test1 END, 
    tester2 = CASE WHEN tester1 IS NOT NULL THEN '$user' ELSE tester2 END, 
    tester2yn = CASE WHEN tester1 IS NOT NULL THEN '$pass' ELSE tester2yn END 
WHERE 
    id = $id