3

我刚刚开始使用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);

我整晚都试图找到这个问题的答案,但我找不到任何东西。

4

3 回答 3

3

有一些事情需要澄清

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

是的,不要使用 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'");
于 2013-03-16T05:01:57.300 回答
0

尝试使用 PHP 的 MySQL 的 DALMP 数据库抽象层。它使用纯 mysqli 并仅在需要时连接到数据库,尽可能从缓存中获取结果,而不接触数据库。

可以在此处找到使用缓存的示例Cache & Prepared statements

于 2013-03-20T18:14:42.293 回答