问题
我希望用户能够选择多个选项来搜索数据库(例如WHERE field IN (optionA, optionB, optionC)
)。他们的想法是,他们在HTML表单中选择他们想要的选项,然后将这些选项作为参数传递给存储过程,以便在WHERE
子句中使用。
示例
假设我们拥有奇异专家的专家 - 也就是说,他们每个人都只能是一项技术的专家。 (我知道这是一个相当愚蠢的例子,人们通常不会想这样构建数据库!只是一个例子:))
到目前为止开发解决方案的步骤
第一页显示一个表单,允许用户选择他们感兴趣的技术。
<form action="showresult.php">
<select name="technologies[]" multiple>
<option value="html">HTML</option>
<option value="css">CSS</option>
<option value="php">PHP</option>
<option value="sql">SQL</option>
</select>
<input type="submit">
</form>
showresult.php应CALL
存储过程,并将所有选定技术的参数传递给它。
*(I'm not sure how to do this)*
存储过程本身将可能的多种技术作为IN
参数存储到存储过程中以在WHERE IN
子句中使用。
DELIMITER //
CREATE PROCEDURE ExpertsInTechnologies(IN technologies VARCHAR(30))
BEGIN
SELECT
Name, Technology
FROM
SingularExperts
WHERE
Technology IN ( ... technologies ... );
END //
DELIMITER ;
到目前为止的研究
我一直在搜索Stack Overflow,发现了几个类似的问题,但是它们都有不同的含义,适用于其他版本的SQL,和/或我很难理解它们。 This question描述了类似的问题,但问题(和提供的答案)不使用预处理语句,并且易受SQL注入攻击。
我更新了HTML,以便名称technologies
为technologies[]
- 以便将其作为数组传递。 This question告诉我,要在通过GET
传递这些值后检索这些值,可以从$_GET['technologies']
访问这些值。