2015-04-21 40 views
0

在PDO语句中是否可以有WHEN语句或IF语句?我试过以下,但它不工作PGM Mysql PDO WHEN或IF语句

$stmt = $conn->prepare('SELECT company_id, name, alias, fk_company_type as type, is_active as active FROM company WHERE (CASE WHEN :srchBy = "alias" THEN alias ELSE name END) LIKE :srchField'); 

$stmt->bindParam(':srchBy', $srchBy, PDO::PARAM_INT); //bind :srchField to $srchField in sql statement 
$stmt->bindParam(':srchField', $srchField, PDO::PARAM_INT); //bind :srchField to $srchField in sql statement 

表结构

company_id  |23980471998218241 | 23980471998218242  | 
fk_company_type |HQ     |SITE      | 
name   |JOHN PLUMBING HQ |JOHN PLUMBING - BRIDGE ST| 
alias   |CITY RD HQ   |BRIDGE ST SERVICE  | 
is_active  |1     |1      | 
created_date |2015-04-18 19:35:32|2015-04-18 19:34:46  | 
+0

你去哪里把绑定PARAMS?请粘贴完整的代码。 –

+1

fyi:你不能绑定标识符(表/列) – Ghost

+1

感谢@Ghost的信息。 –

回答

1

不幸的是,你不能被列名的参数绑定。但你可以做其他的方式

$stmt = $conn->prepare('SELECT company_id, name, alias, fk_company_type as type, is_active as active FROM company WHERE (CASE WHEN "'.$srchBy.'" = "alias" THEN alias ELSE name END) LIKE ?'); 
$stmt->bindValue(1, "%$srchField%", PDO::PARAM_STR); 
$stmt->execute(); 
$result = $stmt->fetchAll(); 
print_r($result); 

各运营商/标识符必须是硬编码的,但如果不区分你需要验证标识

+0

谢谢我给了它一个。但我得到一个不确定的回报。调试我已经定义了$ srchBy =“alias”;另外,如果我用1 = 1替换{$ srchBy} =“alias”,它会起作用,所以CASE语句看起来很好。所以它必须是与$ srchBy条件。有什么想法吗? –

+0

@KaTech你可以请粘贴上面的表格结构以及srchBy的一些可能的值。似乎case语法是错误的。 –

+0

@kemlesh我添加了表格结构和值。希望这有助于和先进的感谢。 –