检查SQL字段中是否包含PHP变量

时间:2010-02-10 17:10:37

标签: php sql

以下可能吗?

DB中的

字段包含:1,2,3,4

$a=1;

$selqry="select * from table where field={contains $a}";

谢谢, 乙

4 个答案:

答案 0 :(得分:1)

MySQL的FIND_IN_SET(str,strlist) function可以帮助你(编辑:oops ....以防你使用MySQL)

如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由以“,”字符分隔的子字符串组成的字符串。
SELECT
  x,y,z
FROM
  tablename
WHERE
  FIND_IN_SET(':id', field)

(如果你没有使用pdo/prepared statements,请将$ id替换为$ a的值,但要确保它已正确编码/转义)

虽然它不是完全索引友好的...你最终会在你的WHERE子句中使用这个函数进行全表扫描。

答案 1 :(得分:0)

当然,这是可能的。

  1. 如果您不介意"1"匹配"2,3,11,4"。您可以使用INSTRLIKE来完成此操作。例如:

    SELECT *
    FROM tbl
    WHERE INSTR(field, '1') != 0
    
  2. 如果您不希望"1""2,3,11,4"匹配,则必须使用(慢)正则表达式,如果您的DBMS支持它(例如,MySQL):

    SELECT *
    FROM tbl
    WHERE field REGEXP '[[:<:]]1[[:>:]]'
    
  3. 然而,更好的问题是这是否是一个好主意。答案就是响亮的。您不应在单个字段中存储多个值。像这样的案例真的会从normalization中受益。

答案 2 :(得分:0)

我不是100%肯定你在问什么,但为什么不做LIKE,它也应该适用于数字领域:

SELECT * FROM foo WHERE id like '%1%';

这将匹配001100101010等。

答案 3 :(得分:0)

如果字段只包含1-8的数字,则可以轻松完成

$selqry="select * from table where field like '%" . intval($a) . "%'";

你“应该”可能会将字段移动到另一个表,并使用基于id连接表的查询。