簡體   English   中英

PHP - 具有SQL查詢的多個函數

[英]PHP - Multiple functions with SQL queries

所以我有一個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']),然后通過代碼使用它,並在頁腳上關閉它。

這可以防止多個鏈接創建和關閉,我認為會提高性能。

有什么想法嗎?

如果這些函數是類的一部分

您可以在處理數據庫連接的地方包含__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;
    }
  }

這樣您就不必擔心重新打開連接並關閉它。 創建帳戶對象時,連接會自動打開,並且當不再引用帳戶對象時,連接會自動關閉。

在這里閱讀有關構造函數和析構函數的更多信息。

此外,正如注釋中所建議的那樣,您可以包含一個廣泛的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;
}

使用全局

$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,那么應該為你做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM