我应该把我的$ mysqli的变量,每个功能?(Should I pass my $mysqli v

2019-07-17 13:26发布

我有从mysql_ *传递到面向对象mysqli的一个小问题。

我的index.php文件的结构类似,包括两个文件:

include('connect.php');
include('function.php');

该connect.php文件中包含:

<?php
$mysqli = new mysqli("localhost", "root", "test", "test");

if (mysqli_connect_errno($mysqli)) {
    printf("Connection failed: %s\n", mysqli_connect_error());
    exit();
}
?>

function.php文件中,有一个名为SHOWPAGE函数不带任何参数,而是使用$ mysqli的连接,在线路喜欢...

$result = $mysqli -> query("SELECT * FROM $table ORDER BY ID DESC"); // Seleziono tutto il contenuto della tabella

我不能管理它,而不传递给函数的$ mysqli的变量来工作,但是当我用mysql_ *废弃的函数,这是没有必要的!

我可以理解为什么,有什么解决的最佳方式?

Answer 1:

用户定义的函数在PHP中有着自己的变量范围。 你需要传递$mysqli的函数作为参数,或者先从功能global $mysqli

这种确切的问题给出了上一个例子变量范围页:

但是,用户定义的函数中引入一个局部函数范围。 在函数内部中使用的任何变量是默认限制到本地函数范围内。 例如,因为echo语句引用了$ a变量的本地版本,该脚本将不会产生任何输出,而它并没有被分配此范围内的值。 您可能会注意到,这是在用C全局变量C语言不同的一点是自动提供给功能,除非被局部变量覆盖。 这会导致人们的一些问题可能会在不经意间改变了一个全局变量。 在PHP中的全局变量必须,如果他们要在函数中使用声明的函数中的全局。

<?php
$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();
?>


Answer 2:

后一个更好的搜索,我发现我的答案,这是任何人谁需要它:

PHP更改为mysqli的。 是不是mysqli_connection全球?

这是我所需要的答案。 不管怎样,谢谢大家谁帮我摆脱困境



Answer 3:

不能管理它,而不传递给函数的$ mysqli的变量来工作,但是当我用mysql_ *废弃的函数,这是没有必要的!

这是不是真的正确。 即使是在老mysql_*功能,你实际上必须通过链路标识符,如果你需要指定哪个数据库连接你有关的,例如:

$result = mysql_query($sql, $link);

此外这个例子说明,你必须沿着通$result了。 如果你没有留出了$link参数:

$result = mysql_query($sql);

MySQL扩展并在内部寻找上次使用的连接。 如果本来没有找到,它会创建一个新的使用在php.ini中设置的参数。 这只是你的信息,以更好地理解为什么和如何这工作了过去。



Answer 4:

你也可以使用连接池,这是值得检查这个出来。

$mysqli = new mysqli('p:localhost', 'username', 'password', 'db_name');


文章来源: Should I pass my $mysqli variable to each function?