2011-04-30 111 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)");