0

php新手,我参加了一门课程,所以明天可以问导师这是否比我想象的更复杂!

我有一个 sql 查询,它工作正常。但我试图在 select 语句中添加和“和”。

这就是我现在所拥有的

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

我在链接的 html 页面上有一个“区域”输入,并且仅当 min_age 和区域值与用户输入的值匹配时才希望返回结果。

我尝试添加一个“和在哪里”,但它不起作用,我不确定是因为多个“还是我想要做的事情需要不同的方法?

谢谢

4

1 回答 1

2

如果您需要多个条件,只需将它们分开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}'";
于 2013-10-23T18:38:46.567 回答