0

我已经为此工作了几个小时,试图将生成的 mysql 查询拆分为可用的变量,但我只是不知道我做错了什么。我不再获得资源 ID#,但现在我得到的只是 print_r 时变量中的“数组”。我正在尝试从它们自己的数组中的 select 语句中获取 3 个字段并使用这些值。我一直在努力尝试让它创建可用的数据。非常感谢任何帮助,因为我觉得我可以花很多很多时间进行修补,但似乎走错了路。

    $Query = "SELECT guardian.Email, child.CFName,  guardian.FName
    FROM child
    INNER JOIN uaccount ON child.ANum = uaccount.ANum
    INNER JOIN guardian ON guardian.ANum = uaccount.ANum
    WHERE uaccount.ANum = '$ANum';";

    $result = mysql_query($query);
    $test = mysql_fetch_array($result, MYSQL_BOTH);
    print_r('this is the test '.$test."<br/>");
    while($row = mysql_fetch_assoc($test, MYSQL_BOTH))
    {
        print_r('this is the row '.$row."<br/>");
        foreach($row as $rows)
            {
                $info = mysql_fetch_assoc($rows, MYSQL_BOTH);
                $Email = $info['0'];
                $FName = $info['1'];
                $CFName = $info['2'];

            }
    }

非常感谢您迄今为止的帮助。在大家的帮助下,我已经能够使用以下代码从数组的第一级提取值:

            $query = "SELECT guardian.Email, guardian.FName, child.CFName
    FROM guardian
    INNER JOIN uaccount ON child.ANum = uaccount.ANum
    INNER JOIN guardian ON guardian.ANum = uaccount.ANum
    WHERE uaccount.ANum = '$ANum';";

    $result = mysql_query($query);

    $info = mysql_fetch_array($result);
    $Email = $info['0'];
    $FName = $info['1'];
    $CFName = $info['2'];

但是,这只会返回 1/3 的数据,因为每个帐户都有 3 个与之相关的监护人电子邮件地址。在我应该返回大约 2000 行的地方,我只得到 670 行。这就是为什么我在原始帖子中嵌套另一层以及为什么我试图从其自身中提取一个 fetch_assoc。如果您不能从自身中拉出一个数组,那么您如何“取消嵌套”?非常感谢任何和所有帮助。

4

3 回答 3

1
$emQuery = "SELECT guardian.Email, child.CFName,  guardian.FName
FROM child
INNER JOIN uaccount ON child.ANum = uaccount.ANum
INNER JOIN guardian ON guardian.ANum = uaccount.ANum
WHERE uaccount.ANum = '$ANum'";

$result = mysql_query($query);
$Email = array();
$FName = array();
$CFName = array();
$test = mysql_fetch_array($result, MYSQL_BOTH);
print_r('this is the test '.$test."<br/>");
while($row = mysql_fetch_assoc($test, MYSQL_BOTH))
{
    echo 'this is the row ';
    print_r($row);
    echo '<br/>';
            //$info = mysql_fetch_assoc($rows, MYSQL_BOTH);
            $Email[] = $info['Email'];
            $FName[] = $info['FName'];
            $CFName[] = $info['CFName'];


}

据我了解,这就是你想要做的。

一些亮点: print_r 只能获取对有效 php 数组的引用,不包含字符串。mysql_fetch_assoc 从变量引用的结果集中提取一行,然后将引用移动到下一行。您不能在它自身的结果上调用此函数,因为它不是有效的语法。

一般来说,至少使用PDOmysqli_函数会更好,因为它允许您使用参数绑定而不是仅使用使用输入作为 SQL 的一部分,因为它更安全。

于 2013-10-21T15:26:24.670 回答
0

您应该像这样遍历结果的行一次:

$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
    // print_r($row); Debug here if you want.
    $Email = $row['Email'];
    $FName = $row['FName'];
    $CFName = $row['CFName'];
}

注意:您提供的第二个参数mysql_fetch_assoc()只接受一个参数(查询的结果)。请参阅此处的文档

mysql_fetch_array()接受另一个参数,该参数指定要返回的数组类型。

于 2013-10-21T15:25:13.633 回答
0

我的一个项目中的广义 PDO 示例($sql将是您的$Query字符串):

$qry = $pdo->query($sql);
$all=array();
$idx=0;
while($fields=$qry->fetch( 'PDO::FETCH_ASSOC' )){
    $all[key($fields)][$idx]=$fields[key($fields)];
    while(next($fields)!==false){
        $all[key($fields)][$idx]=$fields[key($fields)];
    }
    $idx++;
}

$all变量将保存一个数组,该数组又为您选择的每一列保存一个数组。

像这样你可以做一些简洁的事情array_combine($all['Email'],$all['Fname']),你会得到一个数组,其中键是Email列,值由Fname列组成。

于 2013-10-21T20:17:53.163 回答