php - 在mysql查询中围绕变量单引号

时间:2014-10-19 21:15:53

标签: php mysql syntax quotes

为什么我在几个mysql查询示例中通过php看到语法:

$q = "CREATE TABLE '$tablename' ('$t_id_name')";

或类似的东西?我询问变量名称周围的单引号。这是MySQL字符串中需要的吗?如果我回显字符串,它似乎扩展变量是否有引号。

如果这是针对想要成为整数的东西的话,这是否会造成问题?

2 个答案:

答案 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;)来表示价值。