<?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中。
因为你的代码不完整,所以很难找到其中的错误。 作为示例,我没有看到任何对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
正如你所看到的,它工作得很好。 在您代码中,我没有看到任何函数调用,我猜您只是没有调用您的函数>; 所以您不会触发函数来更改全局变量。
最后:多亏那些无能的下野选民回答了所有问题,但没有回答所提出的问题。