我在PHP俱乐部会员网页上有一个表格过滤功能。我做了它,以便用户可以过滤表并选择要在表中显示的成员。例如,他可以选择成员所在的国家或州,然后点击显示。我正在使用准备好的声明。
问题是,我需要使用通配符来简化编码。如何在PHP MySQL查询中使用通配符?我会使用通配符,例如,如果用户不想要特定的国家/地区,而是希望显示所有国家/地区的所有成员。
我知道没有指定WHERE country=
会自动选择任何国家/地区,但我已经构建了它,因此像国家的SELECT控件这样的每个控件都有一个像" CA"或" NY"和" *"如果用户在"所有国家"下离开该控件。然后,将提交的值添加到查询中,如:
$SelectedCountry = $_POST["country"];
sql .= " WHERE country=" . $SelectedCountry;
但问题是使用WHERE country=*
似乎不起作用。没有错误,只是不起作用。是" *" PHP MySQL中的通配符?
答案 0 :(得分:2)
与*
运算符进行比较时,=
在SQL中不是通配符。您可以使用like
运算符并传递%
以允许任何内容。
执行此操作时,%
应该是绑定的唯一内容。 $Bind_country = "'%'";
不正确,因为驱动程序已经引用该值并转义引号。所以你的查询将如下:
WHERE country ='\'%\''
=
也需要like
。所以你想要
$bind_country = '%';
然后查询应该是:
$sql = 'select * from table where country like ?';
如果这是我的应用程序,我会动态构建where
部分。
答案 1 :(得分:0)
在*
子句中使用WHERE
是不对的。你只能给予合法的价值。例如:
// looking for an exact value
SELECT * FROM table WHERE column = 'value'
// you can also do this when looking for an exact value
// it works even if your $_POST[] has no value
SELECT * FROM table WHERE column = 'value' OR '$_POST["country"]' = ''
// looking for a specific or not exact value
// you can place % anywhere in value's place
// % denotes the unknown characters of the value
// it works also even if your $_POST[] has no value
// results will not be the same when you're using AND or OR clause
SELECT * FROM table WHERE column LIKE '%val%'
答案 2 :(得分:0)
我认为以下链接可以解决您的问题。 只需看看并选择您需要的东西。 谢谢。 http://www.w3schools.com/sql/sql_wildcards.asp