PHP - 具有SQL查询的多个函数

时间:2015-01-08 00:18:34

标签: php mysql

所以我有一个PHP文件,其中包含多个执行不同查询的函数,例如:

function getUserEmail($name)
{
    $link=getLink();
    $name=mysqli_real_escape_string($link, $name);
    $output=mysqli_fetch_array(mysqli_query($link, "SELECT email FROM users WHERE name='$name';"));
    mysqli_close($link);
    return $output[0];
}

function getUserName($id)
{
    $link=getLink();
    $id=mysqli_real_escape_string($link, $id);
    $output=mysqli_fetch_array(mysqli_query($link, "SELECT name FROM users WHERE id='$id';"));
    mysqli_close($link);
    return $output[0];
}

function getLink()
{
    $link = mysqli_connect('localhost', 'myUser', 'myPass');
    mysqli_select_db($link, 'myDB');
    if (!$link) die(mysqli_error($link));
    return $link;
}

(这段代码可能不起作用,只是一个例子)

我做的与上面的示例类似,但我认为由于在页面重新加载时调用了许多函数,因此多个DB链接创建和闭包不是最有效的方法(并且因为开始滞后因为添加到我的项目中的多个功能)。

Ny认为:在PHP的标题上创建$ DB链接并将其保存到$ _POST var(如$ _POST ['link']),然后通过代码使用它,然后关闭它页脚。

这可以防止多个链接创建和关闭,我认为可以提高性能。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果这些功能属于类

您可以在处理数据库连接的地方包含__construct()和'__destruct()`函数。例如:

<?php
  class account {
    protected $link;

    function __construct() {
      $link=getLink();
    }

    function __destruct() {
      mysqli_close($link);
    }

    function getUserEmail($name)
    {
      $name=mysqli_real_escape_string($link, $name);
      $output=mysqli_fetch_array(mysqli_query($link, "SELECT email FROM users WHERE name='$name';"));
      return $output[0];
    }

    function getUserName($id)
    {
      $id=mysqli_real_escape_string($link, $id);
      $output=mysqli_fetch_array(mysqli_query($link, "SELECT name FROM users WHERE id='$id';"));
      return $output[0];
    }

    function getLink()
    {
      $link = mysqli_connect('localhost', 'myUser', 'myPass');
      mysqli_select_db($link, 'myDB');
      if (!$link) die(mysqli_error($link));
      return $link;
    }
  }

这样您就不必担心重新打开连接并关闭它。创建帐户对象时,连接会自动打开,并且当不再引用帐户对象时,连接会自动关闭。

详细了解constructors and destructors here

此外,正如评论中所建议的那样,您可以包含一个广泛的getUser()方法,这样您就不必在数据库中查询所有用户的单独条目。它会消除您与数据库交互的次数,并且是处理数据的更有效方式。像这样:

function getUser($id)
{
  $id=mysqli_real_escape_string($link, $id);
  $output=mysqli_fetch_array(mysqli_query($link, "SELECT * FROM users WHERE id='$id';"));
  return $output;
}

答案 1 :(得分:1)

使用全局

$link=false;
function getLink()
    {
      global $link;
      if (!$link) {
      $link = mysqli_connect('localhost', 'myUser', 'myPass');
      mysqli_select_db($link, 'myDB');
      if (!$link) die(mysqli_error($link));
      }
      return $link;
    }

这样,第一次呼叫getLink()建立连接,所有后续呼叫只是重新使用第一次呼叫建立的连接。进行此更改后,您可以保持其余代码相同。能够使用OOP我认为使用mysqli而不是mysql实际上是一个很大的好处,但是如果你不想使用OOP,那么应该为你做。