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

标签 php mysql syntax quotes

为什么我在几个通过 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/

相关文章:

php - PHP Session 和 Cookie 的目的及其区别

mysql - phpMyAdmin 卡在具有多个 SELECTS 的进程上

mysql - 导入错误: No module named 'MySQLdb'

c++ - 模板和#defines 的奇怪行为

php - 如何检查随机字符生成器的重复结果

c# - 输出无效

php - 安全文件上传并验证它

mysql - 编辑 MySql 数据库记录

Python函数语法似乎无效,但运行

python - 如何在 python 中使用生成器制作嵌套 for 循环?