让我们创建一个非常简单的示例文件:
index.php
:
<?php
$connection = mysqli_connect('localhost', 'user', 'pass', 'db');
// connection established successfully
echo 'doing something here for like 500 lines of code';
include('functions.php');
echo countCTR(12, 15);
?>
现在,问题出在functions.php
:
<?php
function countCTR($input1, $input2){
/* in this function I need my database connection ($connection)
which was established already in index.php before this
file was included. however, the $connection isn't open
inside this function. Do I have to execute mysqli_connect
inside every function I define?
*/
}
?>
答案 0 :(得分:0)
这解释为here。
您有两种选择:将$ connection设为全局,或将其传递给方法。我更喜欢后者 - 全局变量让我感到紧张。
要传递连接,请按如下所示更改功能定义:
<?php
function countCTR($input1, $input2, $connection){
/* in this function I need my database connection ($connection)
which was established already in index.php before this
file was included. however, the $connection isn't open
inside this function. Do I have to execute mysqli_connect
inside every function I define?
*/
}
?>
并在index.php中调用它,如下所示:
echo countCTR(12, 15, $connection);
正如评论中所提到的,考虑失败模式并以结构化方式处理异常是一种好习惯。您发布的示例代码(以及我已经调整过的代码)在将其传递给函数之前不会检查连接是否有效;它也不会检查连接是否仍在函数中可用。
您需要确保您的错误处理策略处理此问题 - 但这与您的原始问题并不严格相关。
答案 1 :(得分:-1)
你不应该
只需使用global
关键字。
function countCTR($input1, $input2){
global $connection;
}
答案 2 :(得分:-1)
使用mysql_pconnect()功能,你会没事的。此函数重用已建立的数据库连接。
编辑1 :如Mark所建议的那样,当然更好的选择是将$connection
作为参数传递给您的函数。我当然反对使用全局变量,除非确实必要。它被认为是一种糟糕的编程习惯,只会给你带来麻烦。
编辑2 :您有三种选择:
检查$ connect是否为NULL,如果是,则按照Mensur的建议退出并出错。如果它不为null,则可以通过将$ connection作为参数传递给使用数据库的函数,在整个脚本的其余部分中可靠地使用它。
再次检查$ connect是否为NULL,如果不是,则将其用作函数中的全局变量。我反对这种方法,请参阅编辑1了解原因。
使用mysql_pconnect()
函数,它将创建一个持久连接,以后对mysql_pconnect()的任何调用将使用相同的连接(如果已建立)。
答案 3 :(得分:-1)
不,你不。它应该只创建一个连接。 好主意是在另一个文件中创建数据库连接,然后将其包含在index.php或任何其他文件中。
实施例: database.php中
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
?>
实施例: 的index.php
<?php include("database.php");?>
希望这有助于=)
答案 4 :(得分:-1)
您可以使用两种方法执行此操作 1.将$ connection链接标识符声明为全局
<?php
global $connection = mysql_conect(....);
include_once 'yourfile.php';
$functionReturnValue = CalledFunction( $para1, $para2 );
?>
现在你的yourfile.php看起来像
<?php
function CalledFunetion()
{
global $connection;
// Put rest of the code
}
?>
:)