查询多列php / mysql

时间:2013-10-23 18:33:20

标签: php mysql sql

我刚接触过一个课程,所以如果这比我认为的更复杂,可以明天问导师!

我有一个SQL查询,它工作正常。但我想添加'和'在select语句中。

这就是我现在所拥有的

$query = "SELECT * from table1 where table1.age <= " . $_POST['min_age'] ;

我有一个&#39;地区&#39;在我链接的html页面上输入,并且只有当min_age和region值与用户输入的值匹配时才希望返回结果。

我尝试添加&#39;以及&#39;但它不起作用,我不确定是否是因为多个&#34;或者我想做什么需要不同的方法?

由于

1 个答案:

答案 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}'";