如何将<select multiple =“”>元素的输入提供给(MySQL)存储过程?</select>

时间:2014-12-17 16:22:19

标签: php html mysql stored-procedures mysqli

问题

我希望用户能够选择多个选项来搜索数据库(例如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,以便名称technologiestechnologies[] - 以便将其作为数组传递。 This question告诉我,要在通过GET传递这些值后检索这些值,可以从$_GET['technologies']访问这些值。

0 个答案:

没有答案