提问者:小点点

无法使用php[closed]中函数的全局值更改全局值


<?php
session_start();
$con=new mysqli("localhost","root","","mcq") or die("COnnection failed");
$mark=0;
$question="";
$option1="";
$option2="";
$option3="";
$option4="";
$correct=1;
function databaseconnect($count){
    $query="select * from questions where number=".$count;
    $res=$GLOBALS['con']->query($query);
    if($res==false){
        die("error");
    }
    $row=$res->fetch_array();
    $GLOBALS['question'] =$row['question'];
    $GLOBALS['option1']=$row['option1'];
    $GLOBALS['option2']=$row['option2'];
    $GLOBALS['option3']=$row['option3'];
    $GLOBALS['option4']=$row['option4'];

    $GLOBALS['correct']=$row['correct'];
    echo $GLOBALS['correct'];
}
echo $correct;

databaseconnect函数正被包含此文件的另一个php文件调用。 当我试图从函数内部访问值(correct,option1,option2,option3.。。等)时,该值会被更改,但当我从外部访问该值时,该值不会被更改。我也在函数外部使用了$globals,但不起作用。 我需要更改的值,以便将其回显到div中。


共1个答案

匿名用户

因为你的代码不完整,所以很难找到其中的错误。 作为示例,我没有看到任何对DatabaseConnect()函数调用。

>

  • 在函数中使用全局变量不是问题。 每个开发人员都有自己的风格-如果它是一个好的风格或不是,这是另一个问题。 当然,您可以使用$globals['...']在函数中使用全局变量,或者在函数启动时声明全局变量以便在函数中使用:global$variableName1,$variableName2;

    是的,您可以使用准备好的语句,或者继续代码并转义变量。 我们不知道您使用脚本的目的是什么,它们是否仅供私人使用或在Internet上使用。 即使这不是你的问题,所以把它当作一个暗示,但也不要让别人把你弄糊涂了--我猜你还没有达到理解这一点的水平,它会随着时间的推移而来,不要担心。

    是的,您可以使用参数传递变量并更改它们,在返回它们之后--这是常见的方法,也是函数的正确用法(首选)--这看起来像databaseconnect($ARRAY_WITH_VARIABLES_to_CHANGE,$COUNT),在函数末尾return$ARRAY_WITH_VARIABLES_to_CHANGE;

    现在谈谈你的问题:

    // declare the function
    function databaseconnect($count){
        // i dont know your sql database so i make an array instead
        // for demonstrate it
        $row = array(
            'question' => 'ex1',
            'option1' => 'o1',
            'option2' => 'o2',
            'option3' => 'o3',
            'option4' => 'o4',
            'correct' => 100
        );
    
        $GLOBALS['question']=$row['question'];
        $GLOBALS['option1']=$row['option1'];
        $GLOBALS['option2']=$row['option2'];
        $GLOBALS['option3']=$row['option3'];
        $GLOBALS['option4']=$row['option4'];
    
        echo "Inside the function before change: {$GLOBALS['correct']}\n";
    
        // change the global variable $correct
        $GLOBALS['correct']=$row['correct'];
    
        echo "Inside the function after change: {$GLOBALS['correct']}\n";
    }
    
    
    // your variables before function call
    $mark=0;
    $question="";
    $option1="";
    $option2="";
    $option3="";
    $option4="";
    $correct=1;
    
    echo "Outside the function before change: {$GLOBALS['correct']}\n";
    
    
    // call the function
    databaseconnect(4);
    
    // variable changed from the function using $GLOBALS
    echo "Outside the function after change: {$GLOBALS['correct']}\n";
    

    输出:

    Outside the function before change: 1
    Inside the function before change: 1
    Inside the function after change: 100
    Outside the function after change: 100
    

    正如你所看到的,它工作得很好。 在您代码中,我没有看到任何函数调用,我猜您只是没有调用您的函数>; 所以您不会触发函数来更改全局变量。

    最后:多亏那些无能的下野选民回答了所有问题,但没有回答所提出的问题。