【问题标题】:sqli connect and dissconnect as function errormysqli连接和断开作为功能错误
【发布时间】:2013-07-08 21:36:16
【问题描述】:

我正在尝试使用为所有 mysqli 命令设置的 php 函数创建自己的工作模板

现在这是我的 config.php

<?php

/** Configuration Variables **/

define ('DEVELOPMENT_ENVIRONMENT',true);

if (DEVELOPMENT_ENVIRONMENT == true) {
define('DB_NAME', 'rdb');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');
} else {
 define('DB_NAME', 'db47');
define('DB_USER', 'dbo');
define('DB_PASSWORD', 'S');
define('DB_HOST', 'd.db.1and1.com');

这是一个我正在调用 sql_functions.php

的页面
<?php
//create db connection function
function connect()
{
$connect = mysqli_connect(DB_HOST , DB_USER , DB_PASSWORD, DB_NAME) 
or die ("Failed to connect to MySQL: " . mysqli_connect_error()); 
}

//create db disconect function
function disconnect()
{
$close = mysqli_close();
}

connect();
disconnect();

?>

现在我已经测试了连接功能,但是断开连接功能不断出现以下错误 警告:mysql_close():第 12 行的 R:\UniServer\www\application\functions\sql_functions.php 中未提供 MySQL-Link 资源

我尝试在连接函数中调用变量,所以 函数断开(){ $close = mysqli_close($connect);}

但这仍然会带来错误。 . .please提前感谢,我还在学习所以宁愿解释我的错误,以便我可以纠正而不是刚刚为我写的答案:)

【问题讨论】:

    标签: php function mysqli


    【解决方案1】:

    问题是variable scopedisconnect() 函数没有引用 $connect

    我不建议这样做。虽然我也不推荐包装类,但它比此类功能更好。请考虑通过dependency injection 共享class, singleton, or global object

    【讨论】:

    • 感谢您抽出宝贵时间回复正在阅读与单身人士和班级有关的所有内容这是 OOP 和安全性的最佳方法,似乎有很多关于类的争论,甚至在某些地方读到类不是好习惯以及使用 PDO 而不是 mysqli 。 . .有什么建议吗?
    • 就个人而言,我使用全局数据库对象来避免这一切。我在配置文件中创建对象并根据需要传递它(依赖注入)。至于 PDO 或 mysqli,这取决于你。我使用 mysqli,因为它提供了一些 PDO 抽象没有的较低级别的方法。再说一次,这就是我是如何做到的,我绝不是说这是做到这一点的方法
    【解决方案2】:

    将您的 disconnect() 函数更改为:

    function disconnect()
    {
    mysqli_close();
    }
    

    function disconnect()
    {
    mysqli_close($connect);
    }
    

    如果您将函数定义为变量,则该函数将不会被执行。可能有帮助吗:D

    【讨论】:

      【解决方案3】:

      这是我目前的解决方案,但最终将在 mysqli 中

      config.php

       <?php
      /** Configuration Variables **/
      
      define ('DEVELOPMENT_ENVIRONMENT',true);
      
      class Dbconfig {
      protected $host;
      protected $username;
      protected $password;
      protected $database;
      
      function Dbconfig(){
      if (DEVELOPMENT_ENVIRONMENT == true) {
      $this -> host =  'localhost';
      $this -> username = 'root';
      $this -> password = 'root';
      $this -> database= 'db';
      
      } else {
      $this -> host =  '.db.1and1.com';
      $this -> username = 'dbo';
      $this -> password = 'SW';
      $this -> database = 'db4';
      
      }   
      }
      
      }
      ?>
      

      connect.class.php

      <?php
      
      class createConnection  extends Dbconfig //create a class for make connection
      {
      
      function connectToDatabase() // create a function for connect database
      {
      
          $conn= mysql_connect($this->host,$this->username,$this->password);
      
          if(!$conn)// testing the connection
          {
              die ("Cannot connect to the database");
          }
      
          else
          {
      
              $this->myconn = $conn;
      
              echo "Connection established";
      
          }
      
          return $this->myconn;
      
      }
      
      function selectDatabase() // selecting the database.
      {
          mysql_select_db($this->database);  //use php inbuild functions for select database
      
          if(mysql_error()) // if error occured display the error message
          {
      
              echo "Cannot find the database ".$this->database;
      
          }
           echo "Database selected..";       
      }
      
      function closeConnection() // close the connection
      {
          mysql_close($this->myconn);
      
          echo "Connection closed";
      }
      
      //now test the connection
      
      } 
      $connection = new createConnection(); //i created a new object
      
      $connection->connectToDatabase(); // connected to the database
      
      echo "<br />"; // putting a html break
      
      $connection->selectDatabase();// closed connection
      
      echo "<br />";
      
      $connection->closeConnection();
      ?>
      

      其背后的理论是数据库详细信息保存在通过 bootstrap.php 拉入的 config.php 中,然后加载附加测试的类。除了更改为 mysqli 和删除测试之外,任何人都可以看到我是否可以在安全性或在大型站点周围轻松使用方面进行改进。提前致谢

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 2013-02-19
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多