2015-02-05 52 views
2

我一直在努力做一些从mysqli到pdo的基本转换,作为学习练习(以及未来的课程证明)。PHP中的PDO功能

这是我愿意去工作

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="UTF-8" /> 
    <title>Syndicate Gamers Server Officers</title> 
    <link rel="stylesheet" href="main.css" /> 
    </head> 
    <body> 
    <h1>Syndicate Gamers Server Officer Control Page</h1> 
    <form action="" method="post"> 
     <input type="submit" name="solist" value="SO List" /> 
     <input type="submit" name="activelist" value="Active List" /> 
    </form> 
    <?php 
     require_once "connect.php"; 
     function solist() { 
     global $DBH 
     try { 
      $STH = $DBH->query('select members.name as mname, syndicate_sourcebans.sb_srvgroups.name as sbg ,groups.g_title as fg,sg_servers.server_title as resp from members inner join groups on groups.g_id=members.OrigFGrp left join sg_servers on BIN(sg_servers.server_id)=BIN(members.SOServer) left join syndicate_sourcebans.sb_admins on SteamToInt(syndicate_sourcebans.sb_admins.authid)=members.steamid left join syndicate_sourcebans.sb_srvgroups on syndicate_sourcebans.sb_srvgroups.id=members.origsbgrp where members.member_group_id=17 order by sg_servers.server_title'); 
      $STH->setFetchMode(PDO::FETCH_ASSOC); 
      $STH->execute(); 
      echo "<table> 
      <tr> 
      <th>Name</th> 
      <th>Original Sourcebans Group</th> 
      <th>Original Forum Group</th> 
      <th>Assigned Server</th> 
      </tr>"; 
      while($row = $STH->fetch()) { 
      echo "<tr>"; 
      echo "<td>" . $row['mname'] . "</td>"; 
      echo "<td>" . $row['sbg'] . "</td>"; 
      echo "<td>" . $row['fg'] . "</td>"; 
      echo "<td>" . $row['resp'] . "</td>"; 
      echo "</tr>"; 
      } 
     } 
     catch(PDOException $e){ 
      print $e->getMessage(); 
     } 
     $DBH = null; 
     } 
    ?> 
    </body> 
</html> 

connect.php

<?php 
    $user="redacted"; 
    $pass="redacted"; 
    $dbname="redacted_db"; 
    $db="db.redacted.net"; 
    $DBH = new PDO("mysql:host=$db;dbname=$dbname", $user, $pass); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?> 

使用上面的代码将填充在按下按钮请求数据的代码。

代替全局调用,我也尝试了下面的代码,这导致数据库中没有数据。

function solist($DBH) { 

基于弗雷德和其他的建议,我已经做了修改(主要是实际调用该函数!感谢所有),并从阅读他提供了很大的成功链接。剩下的唯一问题就是试图通过许多其他论坛的建议来放弃全球。

从所有的主要建议是,“通话”的功能,所以我说

if (isset($_POST['solist'])) 
     { 
     solist(); 
     } 

到我的代码块

+0

粘贴不当,纠正。对不起 – driz 2015-02-05 18:52:04

+5

它看起来不像你曾经呼吁你的方法solist – Knarf 2015-02-05 18:52:13

+0

与mysqli这工作,我点击solist,功能solist下的查询运行并输出数据。 作为solist。我错过了什么吗? – driz 2015-02-05 18:53:44

回答

1

按底部的originally/revised posted question/code:

既然你是依靠name="solist"根据您提交的按钮来调用该功能,您需要做一些处理效果:

if(isset($_POST['solist'])){ 
// call the solist function 
echo solist(); 
} 

该函数不会自行启动,它需要被调用。


“或尝试使用function solist(PDO $DBH)

您不必这样做。只需调用该函数;不需要传递参数,因为您已经将其设置为全局参数。

如果你不打算将其声明为全局的,那么就去做function solist($DBH)

+0

为什么是这个DV? – 2015-02-05 20:59:55

+0

目前发布在屏幕上的OP代码是从给定的评论中使用的,并没有将其标记为编辑。如果DV是以此为基础的,则需要收回。这里给出的答案是基于OP最初发布的代码,它不包含我的解决方案,OP要求我将其发布为答案。解释将是有益的,如果答案中的任何内容是错误和/或错误的,那么它将被纠正。 – 2015-02-05 21:16:18