2011-08-23 78 views
0

你们可以给我任何提示,为什么字符串值不传递给查询。下面是代码:字符串MYSQL CASE问题

Array对查询中使用:

Array ([16] => 41 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => buu [30] => bauadaskd) 

代码:

foreach ($arrAnswers as $id => $answer) 
{ $update .= sprintf("WHEN '%d' THEN '%d' ", $id, $answer); 
} 
echo $update .= "END WHERE a_question IN ($ids) AND a_user = '{$_SESSION['current_user_id']}'"; 

输出

UPDATE answers SET a_answer = CASE a_question WHEN '16' THEN '41' WHEN '17' THEN '0' WHEN '18' THEN '0' WHEN '19' THEN '0' WHEN '20' THEN '0' WHEN '21' THEN '0' WHEN '22' THEN '0' WHEN '23' THEN '0' WHEN '24' THEN '0' WHEN '25' THEN '0' WHEN '26' THEN '0' WHEN '27' THEN '0' WHEN '28' THEN '0' WHEN '29' THEN '0' WHEN '30' THEN '0' END WHERE a_question IN (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) AND a_user = '19 

正如你可以看到指数29和30在输出中等于0,即使它们在数组中有自己的值。

回答

2

你的问题就在这里

$更新= sprintf的( “当 '%d',然后 '%d'”,$ ID,$答案)。

应该

$update .= sprintf("WHEN '%d' THEN '%s' ", $id, $answer); 
+0

谢谢这是我没有检查过的唯一的东西。 – Boris

2

您试图格式化为与%d整数。您应该使用%s字符串:

$update .= sprintf("WHEN '%d' THEN '%s' ", $id, $answer); 
+0

谢谢J0HN它的工作原理 – Boris

2

您的通话sprintf()错误格式化字符串,使用%s字符串。 %d是数字:

$update .= sprintf("WHEN '%d' THEN '%s' ", $id, $answer);