我需要检查表单输入是否已设置并根据该查询运行不同的查询。所有查询都在同一个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)有人可以举例说明我如何能够简单地提高效率代码,以便我能理解正确的方法吗?
答案 0 :(得分:1)
我没有阅读代码,只是散文。我不是一个php程序员。话虽如此,我会说这个。
对于问题1,如果php类似于.net或ColdFusion,则返回到应用程序的每组查询结果都存储在应用程序服务器的RAM中。在繁忙的服务器上,这可能会有问题。
你说,“我正在尝试查询同一个表,但在检查是否选中了特定的复选框后,执行不同的查询并在数组中存储不同的值。”。
这种做法似乎效率低下。在访问数据库之前,最好在复选框上执行逻辑操作。实际上,在某些情况下,可能不需要运行查询。
答案 1 :(得分:0)
(我的)SQL专门用于处理可能使服务器超载的大量查询,但是1个查询真的不足以实现它。你只需要100次查询慢一点请求,但由于MySQL查询,你的网站不太可能挂起这么多(除非你选择一个包含10万行的整个表格) 1000次)。
为什么在查询数据库后需要关闭连接?只需执行两个查询,然后关闭数据库。这将花费更少的时间,因为如果MySQL服务器是远程的(不是你的机器的一部分),连接将需要一点时间。
从我的角度来看,您的代码 不好,但是您的查询可能会出现SQL注入问题。有关它的更多信息,请阅读this。最后,按照我的建议你之前的答案,你会没事的。
我想这样的事情会更好:
$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);