Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL搜索语句(PHP)中向变量添加常量值_Php_Mysql - Fatal编程技术网

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

在MySQL搜索语句(PHP)中向变量添加常量值,php,mysql,Php,Mysql,例如,读取excel文件时,变量$level存储值“C1”。我想使用select语句从数据库返回C1-T。在排除C1的其他变体(C1-A、C1-B、C1-C、C1-T2等)的情况下,您如何做到这一点。因为您不能简单地设置短_name='$level'或使用子字符串 $level_sql_switch = mysqli_query($conn, "SELECT course_period_id FROM cours

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

$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'];    

它不是100%清楚的,但是大概
$level
并不总是包含
C1
。假设您总是想找到变量
-T
,那么您只需将参数设置为

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

short_name = '$level-T'

还应注意,您的代码容易受到SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释,以及如何使用PHP/mysqli安全地编写查询的一些示例决不像上面那样将未初始化的数据直接插入SQL

正如我上面所说的,您可以找到如何准确编写所需内容的示例,但mysqli查询的参数化版本如下所示:

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

然后在其他地方,在将它们传递到查询之前,您将第一个参数指定为
$campus
,第二个参数指定为
“$level-T”

mysqli\u qeury()
这是您的自定义函数吗?若否,;这是一个拼写错误。没有弃用,但你必须拼写正确。添加
ini\u集('display\u errors',1);ini_集(“日志错误”,1);错误报告(E_全部);mysqli_报告(mysqli_报告错误| mysqli_报告严格)到脚本的顶部。这将迫使任何mysqli_uuu错误生成一个异常,您可以在浏览器上看到该异常以及正常的PHP错误。不,您编写了qeury而不是queryal,因此“折旧”和“弃用”是两个截然不同的东西。我想,大致检查一下你的拼写。哈哈哈,为什么连起来都有点必要呢?PHP可以像对
$campus
那样进行插值。也就是说,这两个值都应该是占位符值。@tadman true。不知道我为什么那样做。编辑过。是的,它确实应该参数化,但我想这是一个单独的主题。我不知道这些值是否是从用户输入的电子表格中获取的。不清楚。让它正常工作从来不是一个单独的话题。这是一个半修复,它保留了巨大的SQL注入漏洞。参数化对您来说很容易,只需放置
,其余部分留给读者作为练习。您还需要在
$short\u name=“$level-T”
上使用双引号,否则它将不会插入。尽管通常最好先给出安全建议,但我们还是非常赞赏改进。人们通常会抓住“有效”的第一件事,而不阅读警告。
SELECT course_period_id 
FROM course_periods 
WHERE school_id = ? AND short_name = ?