php文件即时

时间:2016-10-23 15:48:20

标签: php variables

在PHP中,如果我有这个分配:

$link = 'Home';

在另一个php部分我需要获取$ link的值并将其插入到纯文本的MYSQL查询中,如下所示:

$sql = "SELECT txt FROM Home WHERE id = 1";

请注意,$ link已在查询中以其值的格式编写。 基本上我需要查看$ link var的内部并将其写在查询中。

为什么我需要这个 - >因为我在点击提交按钮后即时创建php文件。 在新创建的文件内部是一个tinymce文本编辑器,需要从一个表中读取它的文本内容,该表也是随着这个文件一起创建的。

2 个答案:

答案 0 :(得分:0)

你想要这样的东西:

$sql = "SELECT txt FROM ".$link." WHERE id = 1";

答案 1 :(得分:0)

你想要做的是:

$sql = "SELECT txt FROM $link WHERE id = 1";
       ^                ^                 ^

双引号(")指定必须解释字符串(使用单引号,这将不起作用)。在字符串中,您可以写出变量的名称($link),它将被其值“取代”。

我不建议这样做,因为它容易受到SQL注入攻击,这是一种非常糟糕的做法,表明你以一种不寻常的方式做事。最好避免它!

编辑:更糟糕......

当你在评论中说创建一个带有文件名的mysql表时,这是更糟糕的事情。首先,文件名中的所有字符都不应该进入表名。其次,您可以将任何作为文件名,甚至是非实际文件名的内容。

可以伪造HTTP请求,以便文件名是您喜欢的任意字符串,例如:

a (); SELECT * FROM accounts; --

将此字符串放入查询时:

CREATE TABLE $filename (id int PRIMARY KEY, whatever varchar(20) NOT NULL);

您得到了这个结果SQL查询:

CREATE TABLE a (); SELECT * FROM accounts; -- (id int PRIMARY KEY, whatever varchar(20) NOT NULL);

正如您所看到的,如果表a存在,这将创建一个没有任何列的表accounts,然后选择所有用户名和密码。查询的其余部分已使用--注释掉。

这是一个非常简单的SQL注入攻击,你不想这样做!不要将用户输入直接放入SQL查询!!

编辑:从$_POST

获取值

如果您的字段名称为link,则可以使用

访问该字段
$_POST['link']

你可以这样把它放到你的字符串中:

$sql = "SELECT txt FROM {$_POST['link']} WHERE id = 1";