您好我想在我的PHP脚本中从MySQL迁移到MySQLi,我有这个系统类,其功能连接到我需要的时候调用的数据库,使用这样一个简单的方法:
Sys::database_connect();
该函数的实际代码是:
function database_connect(){
require 'conf.php';//configuration file with database variables (sql_)
mysql_connect($sql_serv, $sql_user, $sql_pw) OR die('ERRO!!! não ligou a base de dados');
mysql_select_db($sql_bd);
}
调用函数后,我可以毫无问题地查询数据库。
但如果我把它放在sys类中,我就不能对mysqli做同样的事了:
function database_connect(){
require 'conf.php';
$mysqli = new mysqli($sql_serv, $sql_user, $sql_pw, $sql_bd);
if (mysqli_connect_errno()) {
printf("Ligação à Base de dados falhou: %s\n", mysqli_connect_error());
exit();
}
}
我打电话的时候 SYS :: database_connect();
它连接到数据库,但我不能查询已经习惯了我想要的一个简单的方法,因为我已经完成了普通的MySQL,如果有人可以解释我做错了什么或为什么我不能做就像那样......
提前谢谢你; 费尔南多安德拉德。
答案 0 :(得分:3)
您以后的查询必须使用mysqli连接标识符,您在连接到数据库时创建。因此,请将其保存到系统类的属性中,稍后再使用它。
function database_connect(){
require 'conf.php';
$mysqli = new mysqli($sql_serv, $sql_user, $sql_pw, $sql_bd);
if (mysqli_connect_errno()) {
printf("Ligação à Base de dados falhou: %s\n", mysqli_connect_error());
exit();
}
Sys::$dbConn = $mysqli;
}
然后在
function query( $sql ) {
Sys::$dbConn->query( $sql );
// error handling etc.
}
答案 1 :(得分:1)
我为mysqli数据库类编写了一个扩展
class database extends mysqli {
function __construct() {
parent::__construct('host', 'user', 'password', 'database');
if(mysqli_connect_error()) {
die('Connect error ('.mysqli_connect_errno().')'.mysqli_connect_error());
}
parent::query("SET NAMES 'utf8'");
}
function query($query) {
$result = parent::query($query);
if(!$result) {
echo "<strong>MySQL error</strong>: ".$this->error."<br />QUERY: ".$query;
die();
}
if(!is_object($result)) {
$result = new mysqli_result($this);
}
return $result;
}
}
所以连接数据库是$ db = new database() 执行查询是$ db-&gt; query(YOUR QUERY);