php 如何将mysql更改为mysqli?
微wx笑 2023-01-06【数据库】 3 0关键字: mysql mysqli
今天在解决 Warning: mysqli_multi_query() expects parameter 1 to be mysqli 问题时,发现帝国CMS提供了两种数据库连接操作的方案,分别是 mysql和mysqli,可以在 e/class/db/
今天在解决 Warning: mysqli_multi_query() expects parameter 1 to be mysqli 问题时,发现帝国CMS提供了两种数据库连接操作的方案,分别是 mysql和mysqli,
可以在 e/class/db/ 目录下找到两个相关的文件
db_mysql.php 代码:
<?php define('InEmpireCMSDbSql',TRUE); //------------------------- 数据库 ------------------------- //链接数据库 function do_dbconnect($dbhost,$dbport,$dbusername,$dbpassword,$dbname){ global $ecms_config; $dblocalhost=$dbhost; //端口 if($dbport) { $dblocalhost.=':'.$dbport; } $dblink=@mysql_connect($dblocalhost,$dbusername,$dbpassword); if(!$dblink) { echo"Cann't connect to DB!"; exit(); } //编码 if($ecms_config['db']['dbver']>='4.1') { $q=''; if($ecms_config['db']['setchar']) { $q='character_set_connection='.$ecms_config['db']['setchar'].',character_set_results='.$ecms_config['db']['setchar'].',character_set_client=binary'; } if($ecms_config['db']['dbver']>='5.0') { $q.=(empty($q)?'':',').'sql_mode=\'\''; } if($q) { @mysql_query('SET '.$q,$dblink); } } @mysql_select_db($dbname,$dblink); return $dblink; } //关闭数据库 function do_dbclose($dblink){ if($dblink) { @mysql_close($dblink); } } //设置编码 function do_DoSetDbChar($dbchar,$dblink){ @mysql_query('set character_set_connection='.$dbchar.',character_set_results='.$dbchar.',character_set_client=binary;',$dblink); } //取得mysql版本 function do_eGetDBVer($selectdb=0){ global $empire; if($selectdb&&$empire) { $getdbver=$empire->egetdbver(); } else { $getdbver=@mysql_get_server_info(); } return $getdbver; } //普通操作 function do_dbconnect_common($dbhost,$dbport,$dbusername,$dbpassword,$dbname=''){ global $ecms_config; $dblocalhost=$dbhost; //端口 if($dbport) { $dblocalhost.=':'.$dbport; } $dblink=@mysql_connect($dblocalhost,$dbusername,$dbpassword); return $dblink; } function do_dbquery_common($query,$dblink,$ecms=0){ global $ecms_config; if($ecms==0) { $sql=mysql_query($query,$dblink); } else { $sql=mysql_query($query,$dblink) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysql_error().'<br>'.$query):'DbError'); } return $sql; } function do_dbfetch_common($sql){ $r=mysql_fetch_array($sql); return $r; } function do_dblastid_common($dblink){ $id=mysql_insert_id($dblink); if($id<0) { $sql=do_dbquery_common('SELECT last_insert_id() as total',$dblink); $r=do_dbfetch_common($sql); $id=$r['total']; } return $id; } //选择数据库 function do_eUseDb($dbname,$dblink,$query=0){ if($query) { $usedb=do_dbquery_common('use `'.$dbname.'`',$dblink); } else { $usedb=@mysql_select_db($dbname,$dblink); } return $usedb; } //------------------------- 数据库操作 ------------------------- class mysqlquery { var $dblink; var $sql;//sql语句执行结果 var $query;//sql语句 var $num;//返回记录数 var $r;//返回数组 var $id;//返回数据库id号 //执行mysql_query()语句 function query($query){ global $ecms_config; $this->sql=mysql_query($query,return_dblink($query)) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysql_error().'<br>'.$query):'DbError'); return $this->sql; } //执行mysql_query()语句2 function query1($query){ $this->sql=mysql_query($query,return_dblink($query)); return $this->sql; } //执行mysql_query()语句(选择数据库USE) function usequery($query){ global $ecms_config; $this->sql=mysql_query($query,$GLOBALS['link']) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysql_error().'<br>'.$query):'DbError'); if($GLOBALS['linkrd']) { mysql_query($query,$GLOBALS['linkrd']); } return $this->sql; } //执行mysql_query()语句(操作数据库) function updatesql($query){ global $ecms_config; $this->sql=mysql_query($query,return_dblink($query)) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysql_error().'<br>'.$query):'DbError'); return $this->sql; } //执行mysql_fetch_array() function fetch($sql)//此方法的参数是$sql就是sql语句执行结果 { $this->r=mysql_fetch_array($sql); return $this->r; } //执行fetchone(mysql_fetch_array()) //此方法与fetch()的区别是:1、此方法的参数是$query就是sql语句 //2、此方法用于while(),for()数据库指针不会自动下移,而fetch()可以自动下移。 function fetch1($query) { $this->sql=$this->query($query); $this->r=mysql_fetch_array($this->sql); return $this->r; } //执行mysql_num_rows() function num($query)//此类的参数是$query就是sql语句 { $this->sql=$this->query($query); $this->num=mysql_num_rows($this->sql); return $this->num; } //执行numone(mysql_num_rows()) //此方法与num()的区别是:1、此方法的参数是$sql就是sql语句的执行结果。 function num1($sql) { $this->num=mysql_num_rows($sql); return $this->num; } //执行numone(mysql_num_rows()) //统计记录数 function gettotal($query) { $this->r=$this->fetch1($query); return $this->r['total']; } //执行free(mysql_result_free()) //此方法的参数是$sql就是sql语句的执行结果。只有在用到mysql_fetch_array的情况下用 function free($sql) { mysql_free_result($sql); } //执行seek(mysql_data_seek()) //此方法的参数是$sql就是sql语句的执行结果,$pit为执行指针的偏移数 function seek($sql,$pit) { mysql_data_seek($sql,$pit); } //执行id(mysql_insert_id()) function lastid()//取得最后一次执行mysql数据库id号 { $this->id=mysql_insert_id($GLOBALS['link']); if($this->id<0) { $this->id=$this->gettotal('SELECT last_insert_id() as total'); } return $this->id; } //返回影响数量(mysql_affected_rows()) function affectnum()//取得操作数据表后受影响的记录数 { return mysql_affected_rows($GLOBALS['link']); } //执行escape_string()函数 function EDbEscapeStr($str){ $str=mysql_real_escape_string($str); return $str; } //取得数据库版本 function egetdbver() { $this->r=$this->fetch1('select version() as version'); return $this->r['version']; } } ?>
db_mysqli.php 代码:
<?php define('InEmpireCMSDbSql',TRUE); //------------------------- 数据库 ------------------------- //链接数据库 function do_dbconnect($dbhost,$dbport,$dbusername,$dbpassword,$dbname){ global $ecms_config; $dblocalhost=$dbhost; //端口 if($dbport) { $dblocalhost.=':'.$dbport; } $dblink=@mysqli_connect($dblocalhost,$dbusername,$dbpassword); if(!$dblink) { echo"Cann't connect to DB!"; exit(); } //编码 if($ecms_config['db']['dbver']>='4.1') { $q=''; if($ecms_config['db']['setchar']) { $q='character_set_connection='.$ecms_config['db']['setchar'].',character_set_results='.$ecms_config['db']['setchar'].',character_set_client=binary'; } if($ecms_config['db']['dbver']>='5.0') { $q.=(empty($q)?'':',').'sql_mode=\'\''; } if($q) { @mysqli_query($dblink,'SET '.$q); } } @mysqli_select_db($dblink,$dbname); return $dblink; } //关闭数据库 function do_dbclose($dblink){ if($dblink) { @mysqli_close($dblink); } } //设置编码 function do_DoSetDbChar($dbchar,$dblink){ @mysqli_query($dblink,'set character_set_connection='.$dbchar.',character_set_results='.$dbchar.',character_set_client=binary;'); } //取得mysql版本 function do_eGetDBVer($selectdb=0){ global $empire,$link; if($selectdb&&$empire) { $getdbver=$empire->egetdbver(); } else { if($link) { $getdbver=@mysqli_get_server_info($link); } else { $getdbver=''; } } return $getdbver; } //普通操作 function do_dbconnect_common($dbhost,$dbport,$dbusername,$dbpassword,$dbname=''){ global $ecms_config; $dblocalhost=$dbhost; //端口 if($dbport) { $dblocalhost.=':'.$dbport; } $dblink=@mysqli_connect($dblocalhost,$dbusername,$dbpassword); return $dblink; } function do_dbquery_common($query,$dblink,$ecms=0){ global $ecms_config; if($ecms==0) { $sql=mysqli_query($dblink,$query); } else { $sql=mysqli_query($dblink,$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error($dblink).'<br>'.$query):'DbError'); } return $sql; } function do_dbfetch_common($sql){ $r=mysqli_fetch_array($sql); return $r; } function do_dblastid_common($dblink){ $id=mysqli_insert_id($dblink); if($id<0) { $sql=do_dbquery_common('SELECT last_insert_id() as total',$dblink); $r=do_dbfetch_common($sql); $id=$r['total']; } return $id; } //选择数据库 function do_eUseDb($dbname,$dblink,$query=0){ if($query) { $usedb=do_dbquery_common('use `'.$dbname.'`',$dblink); } else { $usedb=@mysqli_select_db($dblink,$dbname); } return $usedb; } //------------------------- 数据库操作 ------------------------- class mysqlquery { var $dblink; var $sql;//sql语句执行结果 var $query;//sql语句 var $num;//返回记录数 var $r;//返回数组 var $id;//返回数据库id号 //执行mysql_query()语句 function query($query){ global $ecms_config; $this->sql=mysqli_query(return_dblink($query),$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error(return_dblink($query)).'<br>'.$query):'DbError'); return $this->sql; } //执行mysql_query()语句2 function query1($query){ $this->sql=mysqli_query(return_dblink($query),$query); return $this->sql; } //执行mysql_query()语句(选择数据库USE) function usequery($query){ global $ecms_config; $this->sql=mysqli_query($GLOBALS['link'],$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error($GLOBALS['link']).'<br>'.$query):'DbError'); if($GLOBALS['linkrd']) { mysqli_query($GLOBALS['linkrd'],$query); } return $this->sql; } //执行mysql_query()语句(操作数据库) function updatesql($query){ global $ecms_config; $this->sql=mysqli_query(return_dblink($query),$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error(return_dblink($query)).'<br>'.$query):'DbError'); return $this->sql; } //执行mysql_fetch_array() function fetch($sql)//此方法的参数是$sql就是sql语句执行结果 { $this->r=mysqli_fetch_array($sql); return $this->r; } //执行fetchone(mysql_fetch_array()) //此方法与fetch()的区别是:1、此方法的参数是$query就是sql语句 //2、此方法用于while(),for()数据库指针不会自动下移,而fetch()可以自动下移。 function fetch1($query) { $this->sql=$this->query($query); $this->r=mysqli_fetch_array($this->sql); return $this->r; } //执行mysql_num_rows() function num($query)//此类的参数是$query就是sql语句 { $this->sql=$this->query($query); $this->num=mysqli_num_rows($this->sql); return $this->num; } //执行numone(mysql_num_rows()) //此方法与num()的区别是:1、此方法的参数是$sql就是sql语句的执行结果。 function num1($sql) { $this->num=mysqli_num_rows($sql); return $this->num; } //执行numone(mysql_num_rows()) //统计记录数 function gettotal($query) { $this->r=$this->fetch1($query); return $this->r['total']; } //执行free(mysql_result_free()) //此方法的参数是$sql就是sql语句的执行结果。只有在用到mysql_fetch_array的情况下用 function free($sql) { mysqli_free_result($sql); } //执行seek(mysql_data_seek()) //此方法的参数是$sql就是sql语句的执行结果,$pit为执行指针的偏移数 function seek($sql,$pit) { mysqli_data_seek($sql,$pit); } //执行id(mysql_insert_id()) function lastid()//取得最后一次执行mysql数据库id号 { $this->id=mysqli_insert_id($GLOBALS['link']); if($this->id<0) { $this->id=$this->gettotal('SELECT last_insert_id() as total'); } return $this->id; } //返回影响数量(mysql_affected_rows()) function affectnum()//取得操作数据表后受影响的记录数 { return mysqli_affected_rows($GLOBALS['link']); } //执行escape_string()函数 function EDbEscapeStr($str){ $str=mysqli_real_escape_string($GLOBALS['link'],$str); return $str; } //取得数据库版本 function egetdbver() { $this->r=$this->fetch1('select version() as version'); return $this->r['version']; } } ?>
更多具体详细的应用,可以去下载 帝国CMS 的代码研究一下。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/database/2023-01-06/1646.html