php 如何将mysql更改为mysqli?
微wx笑
2023-01-06【数据库】
72
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 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | <?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 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | <?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