我可以在1个php文件中进行多个SQL SELECT查询吗?

时间:2014-01-05 16:43:33

标签: php mysql sql

我需要检查表单输入是否已设置并根据该查询运行不同的查询。所有查询都在同一个DB中,并且大多数查询都在同一个表中。这是一个例子:(注意这是一个示例的简化代码)

//First query

if (isset ($_POST['abccheckbox']))
{

    $abccheckbox = implode("','", $_POST['abccheckbox']); 

    $connect = mysqli_connect("localhost", "root", ""); 
    if (!$connect) { 
        die('Connection Failed: ' . mysqli_error()); 
    } 

    //Connect to Database   
    mysqli_select_db($connect, "trialDB") or die( "Unable to select database");

    $query= "SELECT * FROM xyz_table WHERE xyz IN ('$abccheckbox')";  
    $result=mysqli_query($connect, $query);

    if (!$result)  
    {  
      die('Error fetching results: ' . mysqli_error()); 
      exit();  
    }


    while ($row = mysqli_fetch_array($result))  
    {

        $description[] = $row['description'];  
    }  

    //Closing DB Connection
    mysqli_close($connect); 

}

else {
        $description = 0;
}


//SECOND QUERY

if (isset ($_POST['defcheckbox']))
{

    $defcheckbox = implode("','", $_POST['defcheckbox']); 

    $connect = mysqli_connect("localhost", "root", ""); 
    if (!$connect) { 
        die('Connection Failed: ' . mysqli_error()); 
    } 

    //Connect to Database   
    mysqli_select_db($connect, "trialDB") or die( "Unable to select database");

    $query= "SELECT * FROM xyz_table WHERE xyz IN ('$defcheckbox')";  
    $result=mysqli_query($connect, $query);

    if (!$result)  
    {  
      die('Error fetching results: ' . mysqli_error()); 
      exit();  
    }


    while ($row = mysqli_fetch_array($result))  
    {

        $headings[] = $row['headings'];  
    }  

    //Closing DB Connection
    mysqli_close($connect); 

}

else {
        $headings = 0;
}


//Third Query

if (isset ($_POST['ghicheckbox']))
{

    $ghicheckbox = implode("','", $_POST['ghicheckbox']); 

    $connect = mysqli_connect("localhost", "root", ""); 
    if (!$connect) { 
        die('Connection Failed: ' . mysqli_error()); 
    } 

    //Connect to Database   
    mysqli_select_db($connect, "trialDB") or die( "Unable to select database");

    $query= "SELECT * FROM xyz_table WHERE xyz IN ('$ghicheckbox')";  
    $result=mysqli_query($connect, $query);

    if (!$result)  
    {  
      die('Error fetching results: ' . mysqli_error()); 
      exit();  
    }


    while ($row = mysqli_fetch_array($result))  
    {

        $type[] = $row['type'];  
    }  

    //Closing DB Connection
    mysqli_close($connect); 

}

else {
        $headings = 0;
}


......

我基本上尝试查询同一个表,但在检查是否选中了特定的复选框后,执行不同的查询并在数组中存储不同的值。我觉得代码非常多风而且非常多余。

我的问题是:

1)在1个文件本身中对SQL进行多个SELECT查询或在1个文件中有太多单独的查询会使服务器过载会没问题吗?

2)在上面的代码中,我打开sql连接并为每个查询关闭它。如果我多次连接到sql并在同一个文件中运行单独的查询,这会影响性能吗?

3)有人可以举例说明我如何能够简单地提高效率代码,以便我能理解正确的方法吗?

2 个答案:

答案 0 :(得分:1)

我没有阅读代码,只是散文。我不是一个php程序员。话虽如此,我会说这个。

对于问题1,如果php类似于.net或ColdFusion,则返回到应用程序的每组查询结果都存储在应用程序服务器的RAM中。在繁忙的服务器上,这可能会有问题。

你说,“我正在尝试查询同一个表,但在检查是否选中了特定的复选框后,执行不同的查询并在数组中存储不同的值。”。

这种做法似乎效率低下。在访问数据库之前,最好在复选框上执行逻辑操作。实际上,在某些情况下,可能不需要运行查询。

答案 1 :(得分:0)

  1. (我的)SQL专门用于处理可能使服务器超载的大量查询,但是1个查询真的不足以实现它。你只需要100次查询一点请求,但由于MySQL查询,你的网站不太可能挂起这么多(除非你选择一个包含10万行的整个表格) 1000次)。

  2. 为什么在查询数据库后需要关闭连接?只需执行两个查询,然后关闭数据库。这将花费更少的时间,因为如果MySQL服务器是远程的(不是你的机器的一部分),连接将需要一点时间。

  3. 从我的角度来看,您的代码 不好,但是您的查询可能会出现SQL注入问题。有关它的更多信息,请阅读this。最后,按照我的建议你之前的答案,你会没事的。

  4. 我想这样的事情会更好:

    $connect = mysqli_connect("localhost", "root", "");
    
    if(!$connect) 
    {
        die('Connection Failed: ' . mysqli_error()); 
    }
    
    // Connect to the database.
    mysqli_select_db($connect, "trialDB") or die( "Unable to select database"); 
    
    if(isset($_POST['abccheckbox']) || isset($_POST['defcheckbox']) || isset($_POST['ghicheckbox']))
    {   
        $things = array();
    
        // The variable is now also query safe.
        if(isset($_POST['abccheckbox'])) 
        {
            $things['abccheckbox'] = mysqli_real_escape_string($connect, implode("','", $_POST['abccheckbox']));
            $result = mysqli_query($connect, "SELECT * FROM xyz_table WHERE xyz IN ('{$things['abccheckbox']}')");
    
            // If there's no result we show an echo but we do not interrupt the page from loading as we need to load other queries afterwards.
            if (!$result)  
            {       
                echo "Error fetching results: " . mysqli_error(); 
                $description = 0;
            }
            else
            {
                while ($row = mysqli_fetch_array($result))  
                {
                    $description[] = $row['description'];  
                }
            }
        }
    
        if(isset($_POST['defcheckbox'])) 
        {   
            $things['defcheckbox'] =  mysqli_real_escape_string($connect, implode("','", $_POST['defcheckbox']));
    
            $result = mysqli_query($connect, "SELECT * FROM xyz_table WHERE xyz IN ('{$things['defcheckbox']}')");
    
            if (!$result)  
            {       
                echo "Error fetching results: " . mysqli_error(); 
                $headings = 0;
            }
            else
            {
                while ($row = mysqli_fetch_array($result))  
                {
                    $headings[] = $row['heading'];  
                }
            }
        }
    
        if(isset($_POST['ghicheckbox'])) 
        {   
            $things['ghicheckbox'] =  mysqli_real_escape_string($connect, implode("','", $_POST['ghicheckbox']));
    
            $result = mysqli_query($connect, "SELECT * FROM xyz_table WHERE xyz IN ('{$things['ghicheckbox']}')");
    
            if (!$result)  
            {       
                echo "Error fetching results: " . mysqli_error(); 
                $types = 0;
            }
            else
            {
                while ($row = mysqli_fetch_array($result))  
                {
                    $types[] = $row['type'];  
                }
            }
        }
    }
    
    mysqli_close($connect);