我总是不确定,我发现自己经常玩弄它。
这是正确的吗?
$game_name = "poker"; (Included from Config.php)
$game_name_lower = strtolower($game_name);
$sql = "SELECT * FROM `winners` WHERE `game` = '$game_name_lower'";
答案 0 :(得分:2)
是的,看起来很好。但是,您可能需要考虑使用预准备语句。引用PHP Manual on the topic:
准备好的陈述有两个主要好处:
查询只需要解析(或准备)一次,但可以使用相同或不同的参数执行多次。准备好查询后,数据库将分析,编译和优化它的执行查询的计划。对于复杂查询,如果需要使用不同的参数多次重复相同的查询,则此过程可能会占用足够的时间,从而显着减慢应用程序的速度。通过使用预准备语句,应用程序避免重复分析/编译/优化循环。这意味着预准备语句使用的资源更少,因此运行速度更快。
不需要引用准备语句的参数;驱动程序自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确保不会发生SQL注入(但是,如果使用非转义输入构建查询的其他部分,仍然可以进行SQL注入)。
答案 1 :(得分:1)
如果不看周围的代码,就不可能说出来。如果$game_name_lower
直接来自用户输入,那么肯定不是。否则引用就好了,如果没有必要的话。
答案 2 :(得分:1)
实际上这里的PHP报价很少
只有周围的"
属于PHP
剩下的就是mysql的事情。
答案 3 :(得分:0)
没关系,如果它被正确转义了。
答案 4 :(得分:-1)
应该是这样的,你不需要'围绕表名或列名。
$dbc = mysql connection;
$q = "SELECT * FROM winners WHERE game = '$game_name_lower'";
$r = @mysqli_query($dbc, $q);