mysqli和全局变量

时间:2012-10-17 00:10:53

标签: php mysqli

我已经花了好几个小时试图找到我做过的小错误而且我找不到它...我所做的只是将一个变量称为函数中的全局变量而它只是即使它与上面的功能一起工作也没有工作......

我收到一条错误,提到mysqli为null ...

include 'data/mysqli_connect.php'; 

function process_login(){

global $mysqli;

$username = $_SESSION['username'];


$sql = "SELECT * FROM auth WHERE user='".mysqli_real_escape_string($mysqli,$username)."'";
$query = mysqli_query($mysqli,$sql);


if(mysqli_num_rows($query)>0){

$sql = "DELETE FROM auth WHERE user='".mysqli_real_escape_string($mysqli,$username)."'";
$query = mysqli_query($mysqli,$sql);


if(!$query){

die(mysqli_error());

}

}


$sql = "INSERT INTO auth (user, session) VALUES ('".mysqli_real_escape_string($mysqli,$username)."', '".$_SESSION['id']."')";
$query = mysqli_query($mysqli,$sql);

if(!$query){

echo "Can not insert info into database!<br />". mysqli_error();

}else{

header("Location:chat.php");

}

}


function logout(){

global $mysqli;

$sql = "DELETE FROM auth WHERE session='".mysqli_real_escape_string($mysqli,$_SESSION['id']). "'";
$query = mysqli_query($mysqli,$sql);


if(!$query){

echo "Can not delete info from database!";

}else{

session_destroy();
header("Location: chat.php");

}

}


function get_username(){

global $mysqli;


$sql = "SELECT * FROM auth WHERE session='".mysqli_real_escape_string($mysqli,$_SESSION['id']). "'";
$query = mysqli_query($mysqli,$sql);
$row = mysqli_fetch_array($query);


if(mysqli_num_rows($query) == "0"){

$username = "Guest";

}else{

$username = $row['user'];

 }

 return $username;

}



function post_message(){

global $mysqli;

$text = addslashes(htmlentities(htmlspecialchars($_REQUEST['text'])));


$sql = "INSERT INTO chat (time, user, text) VALUES ('".date("H:i")."', '".get_username()."', '".$text."')";

$query = mysqli_query($mysqli,$sql);


if(!$query){

die(mysqli_error());

}

}

    mysqli_connect.php
    $mysqli = mysqli_connect(localhost, "info", "info", "info");

就像我说它在上面的功能上工作但不是这个功能,它没有发出感觉......我猜我在那里有一个愚蠢的错误只是不知道在哪里。

顺便说一下,我测试和工作的功能是process_login()logout()以及get_username()

get_username()首先运行process_login()post_message()从jquery代码运行,当我按下输入时调用它可能正常工作,因为当我按Enter键时我可以看到错误代码。

对于错误的代码格式化,我很抱歉,不知道如何在此处修复它。

感谢您提供任何帮助或建议。

2 个答案:

答案 0 :(得分:0)

如何/何时调用post_message()?根据您编辑的内容,我找不到任何可以清除$mysqli变量的内容 - 但要调试它,我们需要更多的程序流程。

或者您可以在声明post_message()之后在global $mysqli;内的代码中创建'hack',再次执行include 'data/mysqli_connect.php';,因为$mysqli对您的数据库连接的引用已经那时候已经迷失了。但是,理想情况下,您需要遵循代码流程来确定正确修复的位置 - 并且您的流程似乎无法完全发布,或者太强大而无法完全发布。

(评论太长了,所以这个回复是答案形式,我道歉。)

答案 1 :(得分:0)

不要将$ mysqli作为全局变量,而是尝试将其作为附加参数传递给函数。我有同样的问题,这就是我如何解决它。即...

function post_message($mysqli){


$text = addslashes(htmlentities(htmlspecialchars($_REQUEST['text'])));


$sql = "INSERT INTO chat (time, user, text) VALUES ('".date("H:i")."', 
'".get_username()."', '".$text."')";

$query = mysqli_query($mysqli,$sql);


if(!$query){

die(mysqli_error());

}

希望这适合你。