3

我知道这听起来确实很愚蠢,但我发现 mysqli 准备好的语句及其面向对象的方法很有吸引力,所以我计划将我过去的一些涂鸦从 mysql 转换为 mysqli。

在这里...问题

在mysql中我曾经有一个配置文件,例如包含在每个需要数据库的文件中(即require('sys/dbconfig.php');

我不确定我是否需要在 mysqli 中执行此操作,或者像其他人所说的那样,在需要时打开连接,在不需要时关闭它(即粘贴$mysqli = new mysqli($host, $user, $pass, $database);在需要数据库事务的任何地方。

4

4 回答 4

1

我这样做:

配置文件

define("DB_HOST", "127.0.0.1");
define("DB_NAME", "demo");
define("DB_USER", "root");
define("DB_PASS", "root");

数据库.php

// include database constants
include_once("config.php");                   

// create db connection
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);         

现在你可以通过

$result = $db->query("SELECT x FROM y;");            
于 2012-09-18T14:52:09.510 回答
0

MySqlI有两种风格:过程面向对象

当您使用程序样式时,一切都与 mysqli_ 中的相同。您指的是面向对象的风格,并且配置不同..实际上更面向对象。这意味着您必须创建一个新的 mysqli 实例并使用它的方法来完成工作。

注意:当使用 mysqli_ 与 mysql 相同的方式时,您将遇到与 SQL 注入相同的问题。您应该将 mysqli 与准备好的查询和参数绑定结合使用。

于 2012-09-18T14:40:14.153 回答
0

Mysqli 在实例化时打开连接new mysqli(...)(PDO 也是如此)。

在 PHP 会话期间,您不需要打开/关闭与数据库的连接,因为 PHP 会话的持续时间(对于普通网站/Web 应用程序)少于 1 秒。

在代码中多次强制执行等效的 mysql_connect/mysql_close 仅​​对在整个持续时间内不需要活动连接的长时间运行的脚本有帮助。

每个 mysql 用户允许的单独 mysql 连接数是有限的,具体取决于服务器的配置。

如果您有一些运行时间很长的脚本并且可能会与许多其他脚本相交,您可能会用完每个用户允许的所有连接,从而阻止其他用户。

我建议(作为一种简单的方法)在一个文件中实例化 mysqli,您将在需要数据库访问的任何地方包含该文件,使用您在任何需要它的地方存储 mysqli 对象的变量global $db

于 2012-09-18T15:04:34.977 回答
0

我倾向于像 Panique 那样在配置文件中创建常量。

fetch_db我还使用包含连接代码的静态方法创建了一个 App 类。然后每当我需要一个数据库连接时,我只需调用App::fetch_db().

我可以在今天下午晚些时候回家时发布代码和更多解释。

于 2012-09-18T15:24:15.700 回答