我有一个SQL查询,它工作正常。但我想添加'和'在select语句中。
这就是我现在所拥有的
$query = "SELECT * from table1 where table1.age <= " . $_POST['min_age'] ;
我有一个&#39;地区&#39;在我链接的html页面上输入,并且只有当min_age和region值与用户输入的值匹配时才希望返回结果。
我尝试添加&#39;以及&#39;但它不起作用,我不确定是否是因为多个&#34;或者我想做什么需要不同的方法?
由于
答案 0 :(得分:2)
如果您需要多个条件,请将它们与AND
:
... WHERE table1.age <= ? AND table1.region = ?
无需再次使用WHERE
。就像你在PHP中编写复杂条件一样,不需要多次使用if()
。
PS:这与你的问题没有直接关系,但你应该养成不将$ _POST或$ _GET变量直接放入SQL查询的习惯。这是一个被黑客入侵的好方法!向您的导师询问“SQL注入”,或阅读我的演示文稿SQL Injection Myths and Fallacies。
我知道你刚刚开始,但如果你正在接受电工培训,你应该高度重视学习如何避免触电或如何避免引发火灾。
以下是我使用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}'";