我有从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_ *废弃的函数,这是没有必要的!
我可以理解为什么,有什么解决的最佳方式?
用户定义的函数在PHP中有着自己的变量范围。 你需要传递$mysqli
的函数作为参数,或者先从功能global $mysqli
。
这种确切的问题给出了上一个例子变量范围页:
但是,用户定义的函数中引入一个局部函数范围。 在函数内部中使用的任何变量是默认限制到本地函数范围内。 例如,因为echo语句引用了$ a变量的本地版本,该脚本将不会产生任何输出,而它并没有被分配此范围内的值。 您可能会注意到,这是在用C全局变量C语言不同的一点是自动提供给功能,除非被局部变量覆盖。 这会导致人们的一些问题可能会在不经意间改变了一个全局变量。 在PHP中的全局变量必须,如果他们要在函数中使用声明的函数中的全局。
<?php
$a = 1; /* global scope */
function test()
{
echo $a; /* reference to local scope variable */
}
test();
?>
后一个更好的搜索,我发现我的答案,这是任何人谁需要它:
PHP更改为mysqli的。 是不是mysqli_connection全球?
这是我所需要的答案。 不管怎样,谢谢大家谁帮我摆脱困境
不能管理它,而不传递给函数的$ mysqli的变量来工作,但是当我用mysql_ *废弃的函数,这是没有必要的!
这是不是真的正确。 即使是在老mysql_*
功能,你实际上必须通过链路标识符,如果你需要指定哪个数据库连接你有关的,例如:
$result = mysql_query($sql, $link);
此外这个例子说明,你必须沿着通$result
了。 如果你没有留出了$link
参数:
$result = mysql_query($sql);
MySQL扩展并在内部寻找上次使用的连接。 如果本来没有找到,它会创建一个新的使用在php.ini中设置的参数。 这只是你的信息,以更好地理解为什么和如何这工作了过去。
你也可以使用连接池,这是值得检查这个出来。
$mysqli = new mysqli('p:localhost', 'username', 'password', 'db_name');