2017-06-13 67 views
0

显示包含 “一个” 所有城市:MySQL的:如何通过列名作为MySQL中的查询参数

SELECT * FROM user WHERE city LIKE '%a%'; -- works fine 

什么是正确的语法:

SET @param = 'city'; 
SELECT * FROM user WHERE @param LIKE '%a%'; -- NOT yielding any rows 

测试在MySQL工作台查询

+0

你需要ŧ o使用[13.5 Prepared SQL Statement Syntax](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html)。 – wchiquito

回答

2

正确的语法如下所示:

SET @param = 'city'; 
SET @statement = CONCAT('SELECT * FROM user WHERE ', @param, ' LIKE ', '"%a%"'); 
PREPARE myquery FROM @statement; 
EXECUTE myquery; 
DEALLOCATE PREPARE myquery 

事情要记住:

  1. 放空间的CONCAT PARAMS符合#2在必要时作为CONCAT不会让他们为你,例如你(和MySQL也)更愿意:

...用户在哪里城市LIKE'%a%';

而非:

... userWHEREcityLIKE '%的%'

  • 添加额外的和不同的报价:
  • '%a%'应该变成''%a%''

  • DEALLOCATE到底 - 你宣布一个全局变量“更改为MyQuery”在默认情况下,直到会话复位有效 - 可能会导致冲突和错误

  • 提示要查看CONCAT()的结果,使用

  • SELECT @statement