2011-04-30 92 views
3

如何保存的数据,如果
1)字匹配Pros,它将被保存到t_pros
2)不匹配Pros这个词,它将被保存到t_othersMySQL的词匹配语句

我听说我可以使用mysql CASE语句,但不知道如何使用它?

table pro: 
id t_pros t_others 
------------------------ 
1 Pros 1x 
2 Pros 2x 
3   voucher 

<input type="text" id="t_pros"> 
$db->query("INSERT INTO pro(t_pros,t_others) VALUES($t_pros, $t_pros)"); 
+0

http://bobby-tables.com/ – Zirak 2011-04-30 13:37:35

回答

4

所以在每一行中只有一列有两个值?

在这种情况下,怎么样:

$column = (preg_match('/^Pros/i', $_POST['t_pros'])) ? 't_pros' : 't_others'; 
$t_pros = mysql_real_escape_string($_POST['t_pros']); 
$db->query("INSERT INTO pro($column) VALUES ($t_pros)"); 

也就是说,挑了基于该值是否与“优点”与否(就像你指示),开始,然后立柱稍稍插入到该列,使用MySQL的默认值(通常为NULL)。

+0

提醒注意一个极其重要的一点@Zirak和@Thilo都明确提到,我加入到'mysql_real_escape_string'通话,因为您的代码不明确如果你已经这样做了。在将其放入SQL语句之前,您必须将用户的输入转义出来。 – VoteyDisciple 2011-04-30 13:41:02

+0

谢谢。是啊!因为,我意识到这一点:),上面的代码只是为了我想要的简短例子。 ;)顺便提一下, – tonoslfx 2011-04-30 13:44:19

3

首先,您的输入字段需要属性name =“t_pros”。其次,此代码对SQL注入是开放的 - 请阅读它。

查询可能是这样的:

INSERT INTO pro(t_pros,t_others) VALUES(IF($t_pros = 'Pros', 'Pros', NULL), IF($t_pros = 'Pros', NULL, $t_pros))" 

但同样,这不是安全的。围绕SQL查询中的所有变量使用mysql_real_escape_string,或使用预准备语句。

+0

顺便说一下,这是为了当你真的有理由在SQL中这样做。在这两种情况下使用PHP的其他答案可能是一种更简单的方法。 – Thilo 2011-04-30 13:43:51

0
if ($t_pros == 'Pros') 
    $t_pros_col = $t_pros; 
else 
    $t_others_col = $t_pros; 

$db->query("INSERT INTO pro(t_pros,t_others) VALUES($t_pros_col, $t_others_col)");