繁体   English   中英

php-mysql查询中变量周围的单引号

[英]php - single quotes around variables in mysql queries

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

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

或类似的东西? 我问的是变量名周围的单引号。 这是MySQL字符串中必需的吗? 如果我回显字符串,则无论引号是否存在,似乎都在扩展变量。

如果对原本打算为整数的对象执行此操作,会不会带来问题?

要回答您的问题,引号是必需的,但不必扩展变量。 典型的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-- 该用户名将有效地返回表中的所有用户。

字段或表名必须使用反引号(`),特别是如果字段或表名与mysql命令相同。 并且您需要使用单引号(')作为值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM