【问题标题】:Using Mysqli: Is there a way to not have to connect to the database every single query?使用 Mysqli:有没有办法不必每次查询都连接到数据库?
【发布时间】:2013-03-04 21:44:34
【问题描述】:

我刚刚开始使用MYSQLi 而不是MYSQL,我遇到了一个巨大的烦恼:每次查询都必须连接到数据库等等。当我没有在旧的 MYSQL 中时,为什么我现在必须这样做?或者有没有办法不必这样做?

几个例子:

Mysql:

mysql_query("SELECT id FROM table");

现在在 Mysqli 我总是要做:

mysqli_query($db, "SELECT id FROM table");

我也必须这样做:

mysqli_last_id($db);

mysqli_real_escape_string($db);

我整晚都试图找到这个问题的答案,但我什么也找不到。

【问题讨论】:

  • MySQL 扩展试图在全局范围内重用与mysql_connect 建立的最新连接。在同一脚本中处理多个连接时,这是不直观且危险的。这是它被弃用的原因之一。您应该真正使用 MySQLi 的面向对象版本,创建一个 db 对象并通过您的脚本重用它。
  • 创建你自己的数据库类,OOP 来拯救你!

标签: php mysql sql database mysqli


【解决方案1】:

有些事情需要澄清

  1. 您不必每次都连接。连接到数据库是另一回事,当您调用 mysqli_connect() 时,您应该只为每个应用程序执行一次一次
  2. 所以,您所说的只是使用连接 resource 变量。
  3. 是的,您必须在每个函数中传递它。没什么大不了的,没什么好说的。
  4. 唯一的问题可能是变量范围。在函数中使用global $db;
  5. 只是机械地迁移到 mysqli,使用旧方法的新功能绝对没有意义。如果您想在应用程序代码中继续使用 mysqli_real_escape_string - 根本不用担心转换并继续使用 mysql .
  6. 移动的唯一原因(虽然很弱) - 使用准备好的语句。
  7. Mysqli 对预处理语句的支持很糟糕
  8. 所以,最好退出 mysqli 并使用 PDO
  9. 尽管如此,使用原始 API 函数,无论是 mysql、mysqli 还是 PDO,都很难看。必须采用一些抽象库才能在应用程序代码中使用。

【讨论】:

    【解决方案2】:

    是的,不要使用 mysql_* 函数,它们已被弃用。改用 PDO

    http://www.php.net/manual/es/pdo.construct.php

    $pdo = new PDO(/* Connection options */);
    
    $rows = $pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_OBJ);
    
    foreach ($rows as $row) {
       print_r($row);
    }
    
    $pdo->query("INSERT INTO table SET field1 = 'value1'");
    

    【讨论】:

    【解决方案3】:

    尝试DALMP Database Abstraction Layer for MySQL using PHP. 是使用纯mysqli 并且仅在需要时连接到数据库,尽可能从缓存中获取结果,而不接触数据库。

    使用缓存的例子可以在这里找到Cache & prepared statements

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2017-12-15
      • 2013-12-26
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多