检索mysql数据并输出为脚本。

时间:2013-01-06 00:26:26

标签: php mysql

我有一个带有文本字段的mysql表。其中一个文本条目包含:

<?
if(isset($_GET["id"])) {
include($index.".php");
} else {
include("front.php");
}
?>

当我检索mysql数据时,如何输出脚本所要做的mysql数据?它只是在我的索引文件中输出php而没有做任何事情。

2 个答案:

答案 0 :(得分:2)

使用eval()

见这里:PHP Manual - eval()

但你应该考虑找到另一个问题的解决方案,让你把代码放到一个mysql表中。大多数时候这样的事情很容易避免,并被认为是不好的做法。

答案 1 :(得分:1)

首先,上面发布的代码不是要走的路。这是一般如何不进行编码的示例。

<强>为什么

1)您应该避免使用简短的PHP标记,例如<?<?=,以使您的代码更具可移植性。因为如果服务器有一个选项,例如allow_short_tags已禁用,那么Web服务器只会将您的代码视为纯文本。 (不是PHP脚本)

2)if isset($_GET...)阻止错误,因为当include($index.'.php')有任何价值时,您告诉脚本$_GET['id']。任何!您甚至不会过滤$_GET['id']

根据您上次的评论,这是“为什么不应该将PHP代码存储在数据库中”的答案。

为了从数据库中读取代码,您应该(通常)

  • 连接到SQL服务器
  • 运行查询
  • 获取结果
  • 通过eval()函数
  • 评估回复

但是如果你的SQL服务器很忙并且没有响应怎么办?然后必须暂停该脚本。 这通常被视为bad practice,您绝不应该这样编码。

为什么要完成所有上述“操作”,只需执行以下操作:

<?php include('some_codes.php');// or better require()

另一件重要的事情

当您依赖$_GET['some_key']并根据$_GET键的值包含某些文件时,您应始终验证$_GET['some_key']。一个非常基本的验证将如下所示:

<?php

if ( isset($_GET['foo']) ){

   if ( file_exists('../path' . $_GET['foo']) ){
      // seems like a valid one
      // do include then
   }
}

<强>结论
1)不要使用短标签,而是使用完整标签 - <?php
2)不要相信用户输入,即永远不要相信你从$_GET$_POST获得的价值 3)将代码保存在文件中,然后在需要时进行包含。