我知道这听起来确实非常愚蠢,但我发现mysqli准备好的语句及其面向对象的方法很有吸引力,所以我计划将我过去的一些涂鸦从mysql转换为mysqli。
这是......问题
在mysql中,我曾经有一个配置文件,例如包含在需要数据库的每个文件中(即require('sys/dbconfig.php');
)
我不确定我是否需要在mysqli中执行此操作,或者按照其他人的说法执行此操作,在需要时打开连接,在不需要时关闭它(即在任何地方粘贴$mysqli = new mysqli($host, $user, $pass, $database);
需要数据库事务。
答案 0 :(得分:1)
我这样做:
的config.php
define("DB_HOST", "127.0.0.1");
define("DB_NAME", "demo");
define("DB_USER", "root");
define("DB_PASS", "root");
database.php中
// include database constants
include_once("config.php");
// create db connection
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
现在您可以通过
创建SQL语句$result = $db->query("SELECT x FROM y;");
答案 1 :(得分:0)
MySqlI
有两种版本:过程和面向对象。
当您使用程序样式时,所有都与mysqli _ 中的相同。 您正在引用面向对象的样式,并且配置不同。实际上更多面向对象。这意味着您必须创建一个新的mysqli实例并使用其方法来完成工作。
注意:当使用mysqli_时,与mysql一样,你会遇到与SQL注入相同的问题。您应该将mysqli与准备好的查询和参数绑定结合使用。
答案 2 :(得分:0)
Mysqli在用new mysqli(...)
实例化时打开连接(PDO也是如此)。
在PHP会话期间,您不需要打开/关闭连接到数据库,因为PHP会话的持续时间(对于普通网站/ webapps)不到1秒。
在代码中多次强制等效mysql_connect / mysql_close只对长时间运行的脚本有帮助,这些脚本在整个持续时间内不需要有效连接。
每个mysql用户允许的单独mysql连接数受限制,具体取决于您的服务器配置。
如果您的某些脚本运行时间很长并且可能与许多其他脚本相交,则可能会占用每个用户的所有允许连接,从而阻止其他用户。
我建议(作为一种简单的方法)在一个文件中实例化mysqli,你将需要包含在你需要的任何地方使用global $db
使用你在需要的地方存储mysqli对象的变量。
答案 3 :(得分:0)
我倾向于像Panique那样在配置文件中创建常量。
我还创建了一个带有静态方法fetch_db
的App类,其中包含连接的代码。然后每当我需要数据库连接时,我只需要调用App::fetch_db()
。
我可以在今天下午晚些时候回家后发布代码和更多解释。