在MySQL搜索语句(PHP)中向变量添加常量值

时间:2018-08-30 15:05:19

标签: php mysql

$level_sql_switch = mysqli_query($conn, "SELECT course_period_id 
                                         FROM course_periods 
                                         WHERE school_id = '$campus' 
                                         AND short_name = '$level'");
$course_period_id = $level_sql_switch->fetch_assoc();
$course_period_id = $course_period_id['short_name'];    

例如,当读取excel文件时,变量$ level存储值“ C1”。我想使用select语句从数据库返回C1-T。在排除C1的其他变体(C1-A,C1-B,C1-C,C1-T2等)的同时,您将如何做。因为您不能简单地设置short_name ='$ level'或使用子字符串。

"SELECT course_period_id FROM course_periods WHERE school_id = '$campus' AND short_name = '$level'"       

1 个答案:

答案 0 :(得分:1)

不是100%明确,但是大概$level不会总是包含C1。假设您始终想找到变体-T,则只需将参数设置为

short_name = '$level-T'

完整:

SELECT course_period_id 
FROM course_periods 
WHERE school_id = '$campus' AND short_name = '$level-T'

还应注意,您的代码容易受到SQL Injection攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏数据库。 http://bobby-tables.com对风险进行了解释,并提供了一些示例,说明了如何使用PHP / mysqli安全地编写查询。 从不像上面一样,将未经消毒的数据直接插入SQL中。

如上所述,您可以找到精确地编写所需内容的示例,但是使用mysqli进行查询的参数化版本如下所示:

SELECT course_period_id 
FROM course_periods 
WHERE school_id = ? AND short_name = ?

然后在其他地方,将其传递给查询之前,将第一个参数分配为$campus,将第二个参数分配为"$level-T"