我会引用问题的部分来简化我引用的内容,我是非传统的PHP开发人员,所以在编辑之前询问因为过去的编辑已经破坏了问题,浪费了人们试图回答的时间。如果我不理解为什么你告诉我什么,即使它有效也无法理解代码。
上半场
第1.1部分 <我的主要问题就是这样:如何将分配给mysqli_connect()
的非全局变量可靠地保持可访问?
第1.2部分:为问题增加了一些复杂性:我为AJAX和非AJAX请求以及&#34; dirty&#34;访问同一个文件。 part是不断需要检查非全局变量isset()
。
传统非AJAX请求的结构如下所示......
第1.3部分:目前我已将mysqli_connect()
分配给一个全局变量,我一直读到这个变量显然是纯粹的邪恶。据我所知,整个全局与(什么是非全局,本地?)位在基本术语中只能暴露部分服务器代码,以便其他人可以将PHP与您自己构建的自定义API一起使用(如果不是,那么尝试用为什么一个人会这样做)用一句话来解释它。我没有计划以这种方式创建任何API,但仍希望在有限范围中更好地理解这个主题,因为只有直接适用于此问题的内容才能作为未来的基础。< / p>
这是我的数据库连接文件的精简版;我已添加评论以澄清正在发生的事情。虽然我显然希望改进我的做法,但我并不打算做出任何超级狂野的改变......
<?php
//This file included by the main PHP file.
if ($_SERVER['HTTP_HOST']!='localhost' && substr($_SERVER['HTTP_HOST'],0,7)!='192.168')
{// LIVE domain
$p0 = explode('www.',$_SERVER['HTTP_HOST'],2);
$domain = $p0[1];
}
else
{// Local or network access
$p0 = explode('www.',$_SERVER['REQUEST_URI'],2);
$p1 = explode('/',$p0[1],2);
$domain = $p1[0];
}
if (!isset($_SESSION['user_status']) || $_SESSION['user_status']<8)
{//Common VERY limited SQL syntax access only.
$GLOBALS['connection'] = mysqli_connect($vars['db_host'],$vars['db_user'],$vars['db_pass'],$vars['db_db']);
}
else
{//Admin SQL syntax access
$GLOBALS['connection'] = mysqli_connect($vars['db_host'],$vars['db_user_admin'],$vars['db_pass_admin'],$vars['db_db']);
}
if ($GLOBALS['connection'])
{
if (!isset($_SESSION)) {include('sessions.php');}
$_SESSION['database'] = 1;
$dbs = true;//structure leftover from 'mysql' to 'mysqli' API switch.
if ($dbs)
{//Timezone, etc...
$query1 = "SET time_zone = '+00:00';";
$result1 = mysqli_query($GLOBALS['connection'],$query1);
if ($result1) {}
else {mysqli_error_report($query1,mysqli_error($GLOBALS['connection']),__FUNCTION__);}
}
}
?>
所以目前的查询往往看起来像这样......
$result1 = mysqli_query($GLOBALS['connection'],$query1);
下半场
第2.1部分经过一些阅读后,似乎用于处理mysqli_connect()
的方法是在程序中处理变量时尚。如果单个页面请求有七个SQL查询(我目前连接一次并且可以通过 MySQL查询日志清楚地看到它),我宁愿分配一次而不必重新连接数据库七次em>启用)。我经常遇到连接已经存在的问题(这个问题的肮脏方面)会产生冲突。即使我利用类,我也必须手动将它们作为参数传递给显然太过深层的函数。通过PHP包括在全球范围内简单地看到。所以我希望确保我可以拥有一个标准的 include(),它可以在网站上干净利落地工作,无论它是否是一个AJAX请求。
第2.2部分以另一种方式,如果我们假设以程序方式使用mysqli_connect()
强制PHP重新连接到数据库的非全局变量,例如,针对单个页面请求的所有七个MySQL查询?
第2.3部分简单地说,将mysqli_connect()
分配给(变量,类,对象......以及它的范围是什么)是最好的事情?
第2.4部分简单地说明将{em>文件包含在mysqli_connect()
所在的最佳方式(对于整个网站)以获取更多其他情况,例如: AJAX请求?
我很乐意根据需要澄清/编辑。
答案 0 :(得分:0)
这个很简单。如何使分配给mysqli_connect()的变量非全局但可以可靠地清除?
如果您使用旧的简单程序PHP编写 - 只需将其设为全局。
我为AJAX和非AJAX请求访问相同的文件
这个与db问题根本没有关系。
学习使用模板(或更好的MVC分离),你会发现你可以使用完全相同的代码来提供任何请求。
只能暴露部分服务器代码,以便其他人可以使用PHP
这个是错的。
原因不同。
简单地说明将mysqli_connect()分配给
是最好的事情
事实上,你关心的是最微不足道的事情。虽然不关注真实的。
你真正的问题是使用准备好的陈述。如果您计划将mysqli_query与原始SQL查询完全相同,那么就像使用旧的mysql_query一样 - 那么没有一个理由继续前进 - 只需保留旧的mysql_query即可。就如此容易。