Php 使用Mysqli:有没有一种方法不必每次查询都连接到数据库?

Php 使用Mysqli:有没有一种方法不必每次查询都连接到数据库?,php,mysql,sql,database,mysqli,Php,Mysql,Sql,Database,Mysqli,我刚刚开始使用MYSQLi而不是MYSQL,我遇到了一个巨大的麻烦:每次查询都必须连接到数据库等等。为什么我现在必须这样做,而我在旧MYSQL中没有这样做?或者有没有一种方法不必这样做 举几个例子: Mysql: mysql_query("SELECT id FROM table"); 现在在Mysqli中,我总是要做: mysqli_query($db, "SELECT id FROM table"); 此外,我还必须与以下人员合作: mysqli_last_id($db); 及 我整晚

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

举几个例子:

Mysql:

mysql_query("SELECT id FROM table");
现在在Mysqli中,我总是要做:

mysqli_query($db, "SELECT id FROM table");
此外,我还必须与以下人员合作:

mysqli_last_id($db);


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

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


有一些事情需要澄清

  • 你不必每次都连接。连接到数据库是另一回事,当您调用mysqli_connect()时,您应该只对每个应用程序执行一次
  • 所以,您所说的只是使用连接资源变量
  • 是的,你必须在每个函数中传递它。没什么大不了的,没什么好谈的
  • 唯一的问题可能是可变范围。使用
    global$db在函数内部
  • 机械地转到mysqli,以旧的方式使用新函数是完全没有意义的。如果你想在应用程序代码中继续使用mysqli\u real\u escape\u字符串,根本不用担心转换,继续使用mysql
  • move-to使用准备好的语句的唯一原因(尽管很弱)
  • Mysqli对预先准备好的语句的支持非常糟糕
  • 所以,最好退出mysqli,继续努力
  • 然而,使用原始API函数,无论是mysql、mysqli还是PDO,都是丑陋的。我们必须采用一些抽象库来代替应用程序代码 尝试使用纯mysqli并仅在需要时连接到数据库,尽可能从缓存中获取结果,而不接触数据库


    这里可以找到使用缓存的示例

    MySQL扩展试图在全局范围内重用使用
    MySQL\u connect
    建立的最新连接。在同一个脚本中处理多个连接时,这是不直观且危险的。这是它被弃用的原因之一。你真的应该使用MySQLi的面向对象版本,创建一个db对象并通过脚本重用它。创建你自己的数据库类,面向对象!我使用的是
    MySQLi\uu
    而不是
    MySQL\u
    几乎是一样的。。。使用更好的,PDO。
    mysqli_real_escape_string($db);
    
    $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'");