以下可能嗎?在DB檢查SQL變量是否包含PHP變量
字段包含:1,2,3,4
$a=1;
$selqry="select * from table where field={contains $a}";
感謝, B.
以下可能嗎?在DB檢查SQL變量是否包含PHP變量
字段包含:1,2,3,4
$a=1;
$selqry="select * from table where field={contains $a}";
感謝, B.
當然,這是可能的。
如果您不介意"1"
匹配"2,3,11,4"
。您可以使用INSTR
或LIKE
來完成。例如:
SELECT *
FROM tbl
WHERE INSTR(field, '1') != 0
如果你不想"1"
匹配"2,3,11,4"
,你必須使用一個(慢)的正則表達式,如果你的DBMS支持它(MySQL的,例如,做):
SELECT *
FROM tbl
WHERE field REGEXP '[[:<:]]1[[:>:]]'
但是,更好的問題是這是否是一個好主意。對此的回答是響亮的否。您不應將多個值存儲在單個字段中。像這樣的案例真的會從normalization中受益。
不等於0(!= 0 ) - 爲什麼需要? 該字段將只包含從1到8的數字 謝謝。 – Bift 2010-02-10 17:27:50
這不是真的需要,因爲0在SQL中與「false」同義。它只是強調了「INSTR()」返回一個字符串位置而不是一個包含/不包含布爾值的事實。 – 2010-02-10 17:37:45
我不是100%肯定你問什麼,但爲什麼不只是做一個LIKE
,應該在數字領域工作了:
SELECT * FROM foo WHERE id like '%1%';
這將匹配001
,100
和101
,010
等
MySQL的FIND_IN_SET(str,strlist) function可以幫助你在那裏(編輯:哎呀....如果你使用MySQL)
返回範圍1到N,如果一個值字符串str位於由N個子字符串組成的字符串列表strlist中。字符串列表是由由「,」字符分隔的子字符串組成的字符串。
SELECT
x,y,z
FROM
tablename
WHERE
FIND_IN_SET(':id', field)
(如果你不使用pdo/prepared statements,替換:ID由$ a的值,但要確保它的編碼/正確轉義)
這不是完美的指數型雖然...你」最終將在WHERE子句中完成具有此功能的全表掃描。
如果字段只從1-8包含數字,你可以做到這一點簡單的
$selqry="select * from table where field like '%" . intval($a) . "%'";
你「應該」大概移動領域到另一個表和使用查詢加入基於ID的表。
問題是「僅」標記爲[sql]。你真的想保持它與數據庫系統無關嗎? – VolkerK 2010-02-10 17:41:56