为什么我在几个mysql查询示例中通过php看到语法:
$q = "CREATE TABLE '$tablename' ('$t_id_name')";
或类似的东西?我询问变量名称周围的单引号。这是MySQL字符串中需要的吗?如果我回显字符串,它似乎扩展变量是否有引号。
如果这是针对想要成为整数的东西的话,这是否会造成问题?
答案 0 :(得分:3)
要回答您的问题,引号是必要的,但不能扩展变量。典型的SQL查询如下所示:
$q = "SELECT * FROM `table` WHERE `first_name` = 'user3475234'";
现在,请考虑以下示例:
<?php
$tablename = "users";
$user = "user3475234";
$q = "SELECT * FROM `$tablename` WHERE `first_name` = '$user'";
echo $q;
这将显示:SELECT * FROM `users` WHERE `first_name` = 'user3475234'
。请注意,输出字符串不需要引号,但它们是查询的必要部分。
话虽这么说,像这样的代码打开你的脚本到SQL注入。我不会解释太多,因为有很多资源在讨论它,但请考虑一个人的用户名是user3475234' OR 1==1--
的例子。此用户名将有效地返回表中的所有用户。
答案 1 :(得分:2)
如果字段或表名与mysql命令相同,则必须对字段或表名使用反引号(`)。而且你需要使用单引号(&#39;)来表示价值。