我正在尝试执行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;
}
不幸的是,我尝试过但未能在网上找到答案。我真的希望,有人可以指出我正确的方向。 我也试着在我的描述中详细说明。如果没有,请告诉我,我会提供进一步的细节。截至目前,我真的不知道如何继续。 提前谢谢。
答案 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;
}
现在两个查询都会返回我需要的结果。 谢谢。 :)