Php 我把PDO放在哪里?

Php 我把PDO放在哪里?,php,mysql,pdo,Php,Mysql,Pdo,我的目标是有两种方法来过滤显示的数据。第一个是要显示多少天的时间。另一个允许用户选择要显示的组。他们应该相互独立地工作。但同时,为组NSV选择20天返回,并且仅显示具有这两个条件的记录。但是,为所有组选择20天返回,这同样有效 第一个下拉列表是一个简单的HTML选择/选项设置,在屏幕上显示为“显示10天前”。 另一个在页面上被视为“所有组”,是从MySQL表创建的。为了做到这一点,我有这个功能 function GroupSelect() { $g_query = "SELECT DIS

我的目标是有两种方法来过滤显示的数据。第一个是要显示多少天的时间。另一个允许用户选择要显示的组。他们应该相互独立地工作。但同时,为组NSV选择20天返回,并且仅显示具有这两个条件的记录。但是,为所有组选择20天返回,这同样有效

第一个下拉列表是一个简单的HTML选择/选项设置,在屏幕上显示为“显示10天前”。 另一个在页面上被视为“所有组”,是从MySQL表创建的。为了做到这一点,我有这个功能

  function GroupSelect() {
  $g_query = "SELECT DISTINCT b.g_code, concat(b.g_code, '    ', b.g_name) as theGroups FROM skeds AS a, Groups AS b
   WHERE a.g_code = b.g_code
   ORDER BY b.g_name";  //echo $g_query;  
   foreach($db_found->query($g_query) as $g_row) {
  $bg_code   = $g_row['g_code'];  
  $theGroups = $g_row['theGroups'];  
  $theGroupsSelect .= "<option value=\"$bg_code\">".$theGroups."</option>";
  }
   echo $theGroupsSelect;
  } // End GroupSelect
函数组选择(){
$g_query=“选择不同的b.g_代码,concat(b.g_代码,,,b.g_名称)作为skeds中的组作为a,组作为b
其中a.g_代码=b.g_代码
按b.g_名称排序”;//echo$g_查询;
foreach($db\u found->query($g\u query)作为$g\u行){
$bg_代码=$g_行['g_代码'];
$theGroups=$g_行['theGroups'];
$theGroups选择=“.$theGroups.”;
}
echo$thegroups选择;
}//结束组选择
此函数或至少查询工作正常,并且从表中选择了正确的记录。and语句是HTML格式的

当选择“过滤器”按钮时,我希望其中一个/或两个都运行。两个下拉列表都位于同一个DIV标记(selectDIV)中,并且都使用相同的名称“Filter”。更改两个下拉列表中的任何一个,然后单击“过滤器”将导致显示更改

对GroupSelect函数的调用在第434行附近向下,如下所示

问题是,无论我将PDO数据库分配放在何处,在“GroupSelect”函数或页面“buildlist”的主要函数中,我都会遇到一个致命错误。唯一的区别是它指向导致它们的代码的位置

致命错误:在第12行的…/arhab/hab_launch_list_new.php中对非对象调用成员函数query()

因此,我的第一个问题是将PDO数据库分配放在何处,以便它对这两个函数都有效。我已经在两个函数中分别尝试了它,以及以上两个函数。无论我把它放在哪里,我都会得到上面的致命错误,只有行号会改变

我认为我的问题与不理解如何使用PDO获取这两组信息有关。它们都在同一个MySQL数据库中,并且都使用“skeds”表。但是,较大的函数还使用了另外两个表。我还尝试使GroupSelect函数独立于它自己的文件,并用require_调用它一次。但是这个概念也有问题

我仍在努力学习用PHP做事情的最佳方法,但我真的没有任何本地人可以问。如果你有时间,请看一看,告诉我这个代码哪里出了严重错误

是的,我知道GroupSelect()函数目前已被注释掉。这是给你整个页面感觉的唯一方法。 经验告诉我,你们中的一些人会批评我写这个问题的方式,另一些人因为我忘记了一些细节,请友善些,我会尝试回答所有问题


提前谢谢你

$db_found
在您的情况下未定义,您可以在该函数内创建新连接:

  function GroupSelect() {
  $db_found = new PDO('mysql:host=localhost;dbname=test', 'userName','Password'
                      array(PDO::ATTR_EMULATE_PREPARES => false, 
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

       //.......
   }
或将其作为参数传递:

function GroupSelect($db_found) {....}

而且你也可以把它变成一个属性并访问它
$this->db\u found

问题提示文本通常更多我尝试了这三种方法,主要是我得到的。致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[3D000]:目录名称无效:1046未在/Users/KKAISER/Sites/arhab/hab_-launch_-list_-new.php:12堆栈跟踪:#0/Users/KKAISER/Sites/arhab/hab_-launch_-list_-new.php(12):PDO查询('SELECT DISTINCT…')#1/Users/KKAISER/Sites/arhab/hab_-launch_-list_-list_-new.php(434):GroupSelect()#2{main}在/Users/KKAISER/Sites/arhab/hab#u launch_list_new.php中抛出line12@KeithDKaiser您需要调整连接字符串,检查文档并正确设置它。它与我用于显示的其余数据的连接字符串完全相同,工作正常。我想我不明白我做错了什么。谢谢你在这里的时间,meda,你能给我举个例子吗?@KeithDKaiser告诉我你的代码在工作时是什么样子的,你应该为测试而对值进行编码。您可以创建一个函数来返回PDO连接的新实例,这里有很多选项。$db_found=new PDO(“mysql:host=$strHostName;dbname=$strDbName;charset=utf8“,$strUserName,$strPassword,$strPassword,array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::ATTR_ERRMODE=>PDO::ERRMODE异常));