How to put mysql inside a php function?

后端 未结 6 1008
梦谈多话
梦谈多话 2021-01-14 15:37

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(

相关标签:
6条回答
  • 2021-01-14 15:55

    Because variables are local to functions. You need to add this inside your function:

    global $connection;
    
    0 讨论(0)
  • 2021-01-14 15:58

    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 :)

    0 讨论(0)
  • 2021-01-14 16:03

    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.

    0 讨论(0)
  • 2021-01-14 16:14

    You probably need:

    global $connection;
    

    (Inside the function, that is.)

    See Variable Scope

    0 讨论(0)
  • 2021-01-14 16:16

    $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:

    • (preferably) pass $connection variable within the parameter of the function, or
    • move $connection declaration from outside the function just into the function (if it does not cause additional problems), or
    • redeclare $connection variable within the function (again: if it will not cause additional problems),
    0 讨论(0)
  • 2021-01-14 16:18
    1. Never use global.
      Pass $connection into your function as an argument.

    2. Logic and representation should be separated.
      Read about MVC: here or here.

    3. Global variables are evil, never use it. If someone suggests it - ignore all their answers.

    0 讨论(0)
提交回复
热议问题