表达式引擎中的 'username' 全局变量可以用于 mysql 数据库中的 select 记录吗?

Can the 'username' global variable in expression engine be used to select records from mysql database?

在 parent log-in 之后的着陆页上,我放置了以下 PHP 代码:

 <?php
    $_SESSION['familyid']='{username}';
    $_SESSION['family']='{screen_name}';
    ?>

I did this on a separate page to the booking page because I thought there might be an issue with global variables being parsed last in ExpressionEngine. Then on the booking page, I have:

$con=mysqli_connect("server","database","password");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    $sql = "SELECT ChildID, Child FROM Children WHERE FamilyID =       '".$_SESSION['familyid']."'";
    $result = $con->query($sql);
    $data = mysql_fetch_array($result);

但这并不return任何children。如果我手动给会话变量一个有效的数字,它可以工作,但我无法让 sql 在用户名已传递给变量的地方工作。我正在尝试做的事情是否可行?

严重的安全问题 - 理想情况下,您希望将其全部保留在 EE 中并且不要启用PHP。

正确的方法是将数据库凭据存储在 database.php 配置文件中的模块或插件,您可以在此处阅读指南: http://www.99bugs.com/adding-external-databases-to-expression-engine-project/

或者 add-on 可以为您完成此操作:

<ul>
  {exp:external_entries:select 
    hostname="mysql.deathstar.com" 
    username="deathstar_vader" 
    password="luk35dad" 
    database="deathstar_plans"  
    table="Children" 
    search:FamilyID="{username}"
    orderby="Child" 
    sort="asc"} 
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:external_entries:select}
</ul>

插件中的示例在模板中仍然具有不安全的数据库凭据 - 但评论中提到这些可以存储在配置中,但没有关于格式的详细信息,因此快速查看插件应该会发现一些点亮这个。

理想情况下,您应该在 EE 数据库中拥有子 table,并使用此 free add-on(仅限 EE2 - 不是 EE3)执行类似 EE 的本机操作,以将会话数据保存在登录后的着陆页:

{exp:session_variables:set name="familyid" value="{username}"}
{exp:session_variables:set name="family" value="{screen_name}"}

然后在预订页面上使用 query tag:

<ul>
  {exp:query sql="SELECT ChildID, Child FROM Children WHERE FamilyID = '{exp:session_variables:get name="familyid"}'"}
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:query}
</ul>

但是因为变量实际上总是可用的,所以您不需要将它们保存在会话中,只要用户仍然登录即可:

<ul>
  {exp:query sql="SELECT ChildID, Child FROM Children WHERE FamilyID = '{username}'"}
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:query}
</ul>

编辑 - 刚刚下载并查看了外部条目的代码:没有配置设置,这很奇怪,因为它很简单,所以可以通过调整来制作它更安全。