Php mysql\u查询中变量的通配符运算符
我有一个Php mysql\u查询中变量的通配符运算符,php,mysql,variables,wildcard,Php,Mysql,Variables,Wildcard,我有一个mysql\u查询,其中必须有WHERE columnName='$variable1'。例如: $result = mysql_query("SELECT * FROM database WHERE columnName = '$variable1'"); SELECT * FROM table WHERE ColumnHas LIKE "%something%"; 我希望$variable1的内容检索ColumnName中的任何值;有点像一个通配符操作符。我尝试过使用星号(*
mysql\u查询
,其中必须有WHERE columnName='$variable1'
。例如:
$result = mysql_query("SELECT * FROM database WHERE columnName = '$variable1'");
SELECT *
FROM table
WHERE ColumnHas LIKE "%something%";
我希望$variable1
的内容检索ColumnName中的任何值;有点像一个通配符操作符。我尝试过使用星号(*
)如下:
$variable1 = '*'
$result = mysql_query("SELECT * FROM database WHERE columnName = '$variable1'");
while($row = mysql_fetch_array($result)) {
// Echo the content of ALL ROWS IN TABLE here
}
此查询的结果在回显时应显示数据库中的所有行。星号不能用作通用变量,也不能用作空格(例如,
$variable='
)。MySQL中匹配所有文本组合的通配符运算符是什么?如果要检索特定列中具有任何值的行,只需在WHERE
子句中避免提及该列。如果要检索特定列中具有任何值的行,您只需在WHERE
子句中避免提及该列。这将起作用:
$variable1 = "' OR 1 = 1;"
这将有助于:
$variable1 = "' OR 1 = 1;"
SQL中的通配符是
%
。您需要使用像
而不是=
进行通配符匹配。
例如:
$result = mysql_query("SELECT * FROM database WHERE columnName = '$variable1'");
SELECT *
FROM table
WHERE ColumnHas LIKE "%something%";
这个例子将匹配任何中间有“某物”的字符串,例如
"This is something to match".
如果希望通配符仅在字符串开头匹配,则排除尾随的%
(反之亦然)
对于你的情况
$variable1 = '%'
$result = mysql_query("SELECT * FROM database WHERE columnName LIKE '$variable1'");
应该有用
但是您的用例使我认为不需要通配符匹配。你也可以使用
$result = mysql_query("SELECT * FROM database WHERE columnName NOT NULL");
提供的
columnName
定义为将NULL
作为默认值。SQL中的通配符为%
。您需要使用像
而不是=
进行通配符匹配。
例如:
$result = mysql_query("SELECT * FROM database WHERE columnName = '$variable1'");
SELECT *
FROM table
WHERE ColumnHas LIKE "%something%";
这个例子将匹配任何中间有“某物”的字符串,例如
"This is something to match".
如果希望通配符仅在字符串开头匹配,则排除尾随的%
(反之亦然)
对于你的情况
$variable1 = '%'
$result = mysql_query("SELECT * FROM database WHERE columnName LIKE '$variable1'");
应该有用
但是您的用例使我认为不需要通配符匹配。你也可以使用
$result = mysql_query("SELECT * FROM database WHERE columnName NOT NULL");
如果
columnName
被定义为将NULL
作为默认值。这将是一个简单的解决方案,但代码需要WHERE
子句。有没有其他办法解决这个问题?就像一个通配符操作符一样?如果你绝对必须有where子句不做任何事情,你可以使用where 1=1
这将是一个简单的解决方案,但是代码需要where
子句。有没有其他办法解决这个问题?就像一个通配符操作符一样?如果您必须使用where子句,而where子句不起任何作用,那么您可以使用where 1=1
If($var='*'))$result=mysql\u查询(“SELECT*FROM database.table”);else$result=mysql_查询(“SELECT*FROM database.table,其中columnName='$variable1'”)代码>如果($var='*')$result=mysql\u查询(“SELECT*FROM database.table”),这个怎么办;else$result=mysql_查询(“SELECT*FROM database.table,其中columnName='$variable1'”)代码>这是怎么回事?可以对两个单独的列使用两个通配符吗?例如:$result=mysql\u query(“从数据库中选择*,其中column1 LIKE%和column2 LIKE%”)代码>@JSW189是的,在一个查询中使用多个通配符是完全可以接受的。@zsaat14是正确的。可以在单个WHERE
子句中使用任意多个LIKE
s。我只想警告您,与类似的进行通配符匹配可能会导致性能下降。这可能会导致表扫描。请小心放大。如“%matchstring”
和非空
匹配指令最终都无法使用索引进行搜索。是否可以对两个单独的列使用两个通配符?例如:$result=mysql\u query(“从数据库中选择*,其中column1 LIKE%和column2 LIKE%”)代码>@JSW189是的,在一个查询中使用多个通配符是完全可以接受的。@zsaat14是正确的。可以在单个WHERE
子句中使用任意多个LIKE
s。我只想警告您,与类似的进行通配符匹配可能会导致性能下降。这可能会导致表扫描。请小心放大。像“%matchstring”这样的和非NULL
匹配指令最终都无法使用索引进行搜索。