我是否需要在定义的每个函数中建立另一个数据库连接?

时间:2012-02-24 11:13:43

标签: php sql

让我们创建一个非常简单的示例文件:

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?
   */
}

?>

5 个答案:

答案 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 :您有三种选择:

  1. 检查$ connect是否为NULL,如果是,则按照Mensur的建议退出并出错。如果它不为null,则可以通过将$ connection作为参数传递给使用数据库的函数,在整个脚本的其余部分中可靠地使用它。

  2. 再次检查$ connect是否为NULL,如果不是,则将其用作函数中的全局变量。我反对这种方法,请参阅编辑1了解原因。

  3. 使用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
     }
   ?>
  1. 使用mysql_pconnect()函数
  2. :)