为什么我在几个通过 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 注入(inject)。我不会对此解释太多,因为有很多资源讨论它,但请考虑某人的用户名是 user3475234' OR 1==1--
的示例。此用户名将有效地返回表中的所有用户。
关于php - mysql 查询中变量的单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455506/