【问题标题】:How to link variable and strings in PHP如何在 PHP 中链接变量和字符串
【发布时间】:2017-01-11 02:08:58
【问题描述】:

我有一张名为cms_settings 的表。我用前缀 cms_ 命名所有表格,所以我创建了一个变量 $dbpraefix="cms_" 当我使用“从 $dbpraefix.settings 中选择值”命令调用该条目时,它无法继续。

我也试过不同的版本。比如“从 '.$dbpraefix.'settings 中选择等等。没有任何效果。

但是如果我改用“从cms_settings 中选择值,它可以工作!我该如何解决这个问题。非常感谢

 <?PHP
    function getSetting($property){
    global $connection;
    $dbpraefix= "cms_";
    $sql= "SELECT value FROM $dbpraefix.settings WHERE property='$property'";
    $ergebnis= mysqli_query($connection, $sql);
    $row = mysqli_fetch_row($ergebnis);
    return $row[0];
    }
?>

【问题讨论】:

  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET 数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 谢谢塔德曼。我是 PHP 新手,所以我还是不明白你的建议。但我会在 6 个月后再次看到这篇文章 :) 我希望在那里能理解它。
  • 如果这段代码是公开的,有很多危险的人会探查你的网站并寻找问题。不要被抓到。使用占位符值并不难,而且实际上使您的代码更清晰、更易于阅读。
  • 这个问题还没有解决吗?我没有看到任何可接受的答案。

标签: php mysql database select hyperlink


【解决方案1】:

您的查询失败,因为在字符串"...$dbapraefix.settings..." PHP 没有意识到您希望中间的. 是字符串连接运算符而不是简单的点。结果字符串变为cms_.settings 而不是cms_settings

变化:

"SELECT value FROM $dbpraefix.settings WHERE property='$property'";

"SELECT value FROM {$dbpraefix}settings WHERE property='$property'";

【讨论】:

  • "SELECT value FROM {$dbpraefix}settings WHERE property='{$property}'"; 我喜欢在使用括号时保持一致:)
【解决方案2】:

前缀和表名之间有一个点,这就是它不起作用的原因。

试试这个:" . $dbpraefix . "settings

【讨论】:

    【解决方案3】:

    最简单的方法是给你的函数添加一个新参数,这样当传入函数时它指定表的名称 例如:$table = "设置";

    function getSetting($property,$table){
    global $connection;
    $table= "cms_".$table;
    $sql= "SELECT value FROM $table WHERE property='$property'";
    $ergebnis= mysqli_query($connection, $sql);
    $row = mysqli_fetch_row($ergebnis);
    return $row[0];
    }
    

    【讨论】:

      【解决方案4】:

      如下更改您的查询

      $sql= "SELECT value FROM ".$dbpraefix."settings WHERE property='$property'";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 2019-11-19
        • 1970-01-01
        相关资源
        最近更新 更多