如果您需要多个条件,只需将它们分开AND
:
... WHERE table1.age <= ? AND table1.region = ?
无需WHERE
再次使用。就像您if()
在 PHP 中编写复杂条件时不需要多次使用一样。
PS:这与您的问题没有直接关系,但您应该养成不将 $_POST 或 $_GET 变量直接放入 SQL 查询的习惯。这是被黑客入侵的好方法!向您的导师询问“SQL 注入”,或阅读我的演示文稿SQL 注入神话和谬误。
我知道你才刚刚开始,但如果你正在接受电工培训,你会优先考虑学习如何避免触电或如何避免引起火灾。
这是我将如何使用 mysqli 编写查询的方法。使用查询参数的一个优点是您永远不必担心引号的开始和结束位置。
$query = "SELECT * from table1 where table1.age <= ? AND table1.region = ?";
$stmt = $mysqli->prepare($query) or trigger_error($mysqli->error, E_USER_ERROR);
$stmt->bind_param("is", $_POST["min_age"], $_POST["region"]);
$stmt->execute() or trigger_error($stmt->error, E_USER_ERROR);
我在这里展示的另一个好习惯是总是报告prepare() 或execute() 是否返回错误。
如果必须将变量插入 SQL,首先确保通过将值强制为整数或使用适当的转义函数(如 mysqli_real_escape_string())来保护变量。 不要将 $_POST 变量直接放入字符串中。此外,如果您使用 PHP 的语法将变量直接嵌入双引号字符串中,则不必停止并重新启动引号:
$age = (int) $_POST["min_age"];
$region = $mysqli->real_escape_string($_POST["region"]);
$query = "SELECT * from table1 where table1.age <= {$age}
AND table1.region = '{$region}'";