我有一个文件myfunctions.php,它有四个功能。调用时所有函数对数据库执行一些事务。如果我只调用该页面中的一个功能正常工作。但如果我调用两个函数而不是只有一个顶部函数(首先调用的函数)正在工作而其他函数不起作用。
myfunctions.php
<?php
include('includes/db.inc.php');
function blockip($ip,$attempts){
global $mysqli;
if(isset($ip) && $ip!=''){
$query = 'INSERT INTO blockip VALUES(?,?)';
if($stmt = $mysqli -> prepare($query)){
$stmt -> bind_param('si',$ip,$attempts);
$stmt -> execute();
$stmt -> close();
}
$mysqli -> close();
}else{
echo $mysqli-> error();
}
}
function getip($ip){
global $mysqli;
$ip_found = null;
if(isset($ip) && $ip!=''){
$query = 'SELECT `ip` FROM `blockip` WHERE `ip`=?';
if($stmt=$mysqli -> prepare($query)){
$stmt -> bind_param('s',$ip);
$stmt -> execute();
$stmt -> bind_result($ipret);
$stmt -> fetch();
$stmt -> close();
if($ipret!=null)
$ip_found = $ipret;
else
$ip_fount = '';
}
$mysqli -> close();
}
return $ip_found;
}
?>
此文件中的其他函数也使用$ mysqli,声明它是全局的,并且所有函数都具有相似的性质。
我调用这些函数的文件login.php
<?php
session_start();
include('myfunctions.php');
$client_ip = $_SERVER['REMOTE_ADDR'];
?>
<!DOCTYPE html>
<html>
<!-- Some HTML Code HERE -->
</html>
<?php
if($_SESSION['errorcode']==1){
echo '<center> Invalid Captcha </center>';
}elseif($_SESSION['errorcode']==2){
echo '<center> Invalid UserName / Password Combination </center>';
trygetip($client_ip);
}
if($_SESSION['errorcode']==3){
session_destroy();
header('Location: 403.html');
exit();
}
?>
我的数据库文件db.inc.php
<?php
error_reporting(0);
$db="xxxxxx";
$host="xxxxxx";
$username="xxxx";
$password="xxxx";
$mysqli = new mysqli($host,$username,$password,$db);
if($mysqli->connect_error){
die('Connection Failed : '.$mysqli-> connect_errno.' : '.$mysqli -> connect_error);
}
?>
现在如果我使用两个函数getip($ someiphere)而不是bockip($ someiphere,$ attempts)比第二个函数不起作用,如果我替换它们的位置也会出现同样的问题。 提前谢谢
答案 0 :(得分:1)
在两个函数中关闭mysql连接,只省略$mysqli -> close();
。
答案 1 :(得分:0)
因为你在每个函数结束时关闭$ mysqli,你应该在脚本结束时关闭