功能不起作用的第二个选择查询

时间:2015-06-20 16:23:42

标签: php mysql pdo

我正在尝试执行2个选择查询,一个接着一个。第一个查询包含在函数中。在此函数中,调用另一个包含sql语句的函数。 起初我尝试将两个sql语句添加到同一个函数中。那也行不通。第一个查询正确执行,但第二个查询没有。 如果我单独执行查询,它们就可以正常工作。

第一个查询,获取从表单传递的id并返回成员的信息。这涉及几个表格。成员信息包含在一个表中。城市,州和县都在自己的桌子上。 每个成员最多可以附加两个类别。我再创建了一个额外的SQL select语句来检索该信息,使用成员ID来隔离信息。

function editmember()
     global $db;
     $sql = "SELECT m.Id, m.Lname, m.Fname, m.Company, m.Street, m.Zip, m.Phone1, m.Phone2, m.Email, m.Web, m.Active, cy.Name, s.Abbr, co.Name
     FROM tbl_Members AS m
     JOIN tbl_City AS cy
     ON m.City=cy.Id
     JOIN tbl_State AS s
     ON m.State=s.Id
     JOIN tbl_County AS co
     ON m.County=co.Id
     WHERE mId=$id";

     $sqlRes = $db->prepare($sql);

     if($sqlRes->execute()) {
        $sqlRes-> bind_result($id, $lname, $fname, $comp, $street, $zip, $phonea,$phoneb, $email, $web, $status, $city, $state, $county); 
        while($sqlRes->fetch()) {
           $ems .= "$id, $lname, $fname, $comp, $street, $zip, $phonea, $phoneb, $email, $web, $status, $city, $state, $county"; 
           $ems .= getcat($id); 
        }
     }


     return $ems;   
}

这是第二个功能

function getcatsql($id)
{
     global $db;
     $sql = "SELECT mtgId, mtgMemId, mtgGId FROM tbl_mem_to_group WHERE    mtgMemId=$id";
     $sqlRes = $db->prepare($sql);
     if($sqlRes->execute()) {
        $sqlRes-> bind_result($mtgid, $memid, $catid);
        while($sqlRes->fetch()) {
           $ems = "$mtgid, $memid,$catid";
        }
     }

     return $ems;
}

不幸的是,我尝试过但未能在网上找到答案。我真的希望,有人可以指出我正确的方向。 我也试着在我的描述中详细说明。如果没有,请告诉我,我会提供进一步的细节。截至目前,我真的不知道如何继续。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不认为mysqli和PDO兼容,如您提供的错误所示。所以我为数据库连接做的是:

function dbConnect()
{

    global $dbh;

    $dsn = DB_HOST;
    $user = DB_USER;
    $password = DB_PASS;


    try 
    {           
        $dbh = new PDO($dsn, $user, $password);
    } 
    catch(PDOException $e) 
    {
        //echo("<p>Connection failed: " . $e->getMessage() . "</p>");
    }


    return $dbh;
} 

然后我执行以下查询:

$stmt = $dbh->prepare("DELETE FROM accessControl WHERE ip = ? AND subnet = ?");             
$stmt->bindParam(1, $ip, PDO::PARAM_STR);
$stmt->bindParam(2, $subnet, PDO::PARAM_STR); 
$stmt->execute();

然后断开连接:

function dbDisconnect()
{
    global $dbh;
    $dbh = null;
    return $dbh;
}

这里有很多关于PDO的内容:http://php.net/manual/en/pdo.connections.php但我不认为mysqli在这里是正确的:)

你也可以做一个JOIN并执行类似的东西:

$stmt = $dbh->prepare("SELECT * FROM users INNER JOIN questions ON users.questionID = questions.questionID WHERE email = ?");

这样您就不必遍历第二个表的每个条目:http://www.w3schools.com/sql/sql_join.asp

答案 1 :(得分:0)

感谢您的所有提示。 我通过以下方式解决了这个问题:

首先,我更改了连接字符串。

function doDB()
{
$db= new PDO('mysql:host=hoststring;dbname=dbname', 'username', 'password');
}

然后我将第一个函数从预备语句更改为此

function memberedit()
{
 $sql = "SELECT m.Id, m.Lname, m.Fname, m.Company, m.Street, m.Zip, m.Phone1, m.Phone2, m.Email, m.Web, m.Active, cy.Name, s.Abbr, co.Name
                        FROM tbl_Members AS m
                        JOIN tbl_City AS cy
                        ON m.City=cy.Id
                        JOIN tbl_State AS s
                        ON m.State=s.Id
                        JOIN tbl_County AS co
                        ON m.County=co.Id
                        WHERE m.Id=$id";

        foreach ($db->query($sql) AS $row) {
            $memid = $row['Id'];
            $lname = $row['Lname'];
            $fname = $row['Fname']; 
            $comp = $row['Company'];
            $street = $row['Street'];
            $zip = $row['Zip'];
            $phonea = $row['Phone1'];
            $phoneb = $row['Phone2'];
            $email = $row['Email'];
            $web = $row['Web'];
            $status = $row['Active']; 
            $city = $row['Name'];
            $state = $row['Abbr'];
            $county = $row['Name'];
        $ems .= "$id, $lname, $fname, $comp, $street, $zip, $phonea, $phoneb, $email, $web, $status, $city, $state, $county"; 
        $ems .= getcat($id);
        }

        return $ems;    
}

继续对第二句话做同样的事情

function getcat($id)
{
    global $db; 

    $sql = "SELECT mtgId, mtgMemId, mtgGId FROM tbl_mem_to_group WHERE mtgMemId=$id";
            foreach ($db->query($sql) AS $row) {
            $mtgid = $row['mtgId'];
            $memid = $row['mtgMemId'];
            $catid = $row['mtgGId'];
$ems .= "<p>$mtgid, $memid, $catid</p>";
            }

    return $ems;
}

现在两个查询都会返回我需要的结果。 谢谢。 :)