使用UPDATE和CASE when时,绑定参数的正确方法是什么



我从未对键/值表执行过bind_param()。所以,我不确定CASE WHEN是否可以这样应用。

CCD_ 2列保存所有这些";cust_xx"项,而它们的实际值位于value列中。

此外,我不确定$who(这是一个INT变量(是否需要绑定。此外,我不确定我应该使用ssss还是ddddd。它们是表单中输入的两倍,但它们的字段(网络论坛上的个人资料字段(只是VARCHAR。

无论如何,我得到

PHP致命错误:未捕获错误:调用bool 上的成员函数bind_param((

$stmt = $connmember->prepare(" UPDATE smfqg_themes  SET 


`value` =  CASE(   WHEN (`variable` = 'cust_novpil') THEN ?
WHEN (`variable` = 'cust_decpil') THEN ?
WHEN (`variable` = 'cust_janpil') THEN ?
WHEN (`variable` = 'cust_febpil') THEN ?
WHEN (`variable` = 'cust_marpil') THEN ?
END)
WHERE id_member = '$who' ");

$stmt->bind_param('ddddd', $novpil, $decpil, $janpil, $febpil, $marpil); 
$stmt->execute();

也为id使用占位符。

CASEWHEN子句周围没有括号。您也可以使用较短的CASE column WHEN value语法。

如果某些行的variable不是其中一个值,那么最好使用ELSE子句来保持variable的值不变。否则将设置为NULL

$stmt = $connmember->prepare(" UPDATE smfqg_themes  SET 
`value` = CASE `variable`
WHEN 'cust_novpil' THEN ?
WHEN 'cust_decpil' THEN ?
WHEN 'cust_janpil' THEN ?
WHEN 'cust_febpil' THEN ?
WHEN 'cust_marpil' THEN ?
ELSE `value`
END
WHERE id_member = ? ");

$stmt->bind_param('ddddd', $novpil, $decpil, $janpil, $febpil, $marpil, $who); 
$stmt->execute();

最新更新