I have problem about putting mysql into a function showMsg(). The mysql is working fine if it is not wrapped by function showMsg(), but when I wrap it with function showMsg(
Because variables are local to functions. You need to add this inside your function:
global $connection;
As everyone mentioned, the issue has to do with variable scoping. Instead of add global $connection;
you could consider a more OOP approach and consider:
A: passing the $connection variable into the function.
B: placing related functions in a class and pass the DB connection into the Class constructor. for example:
class YourClass {
private $connection;
public function __construct($connection) {
$this->connection = $connection;
}
public function showMsg(){
$query2 = "SELECT id, message, username, datetime FROM messageslive ORDER BY id DESC LIMIT 20";
$result2 = mysql_query($query2,$this->connection) or die (mysql_error());
confirm_query($result2);
$num = mysql_num_rows($result2);
while($msginfo = mysql_fetch_array($result2)){
echo $msginfo['message'];
echo $msginfo['username'];
}
}
}
I don't have enough rep to comment. But I also like OZ_'s answer :)
Simply put, functions ignore outside variables due to variable scope. You must let the declare the variable as being from the outside by using global
or you can send $connection
through a parameter.
You probably need:
global $connection;
(Inside the function, that is.)
See Variable Scope
$connection
variable has no value assigned. The following code should solve your problem (add it at the beginning of the function):
global $connection;
But you should be aware of the fact, that using globals is not a good idea and you may want to:
$connection
variable within the parameter of the function, or$connection
declaration from outside the function just into the function (if it does not cause additional problems), or$connection
variable within the function (again: if it will not cause additional problems),Never use global
.
Pass $connection
into your function as an argument.
Logic and representation should be separated.
Read about MVC: here or here.
Global variables are evil, never use it. If someone suggests it - ignore all their answers.