Я получаю странные результаты с этим блоком кода. цикл foreach не выполняет свою работу, а время цикла истекло. Использование PDO для запросов - PullRequest
0 голосов
/ 24 марта 2011

Это мой код

public function alpha()
{
    $alpha = NULL;
    $sql = "SELECT 
        SUBSTRING(`last_name`, 1, 1) AS alpha,
        SUBSTRING(`middle_name`, 1, 1) AS subMiddleName,
        `id_clients`,
        `type`,
        `first_name`,
        `middle_name`,
        `last_name`,
        `address`,
        `primary_number`,
        `secondary_number`,
        `home_number`,
        `office_number`,
        `cell_number`,
        `fax_number`,
        `ext_number`,
        `other_number`,
        `comments`
        FROM `clients`
        WHERE `user_id` = 1
        AND `is_sub` = 0
        AND `prospect` = 1
        ORDER BY `last_name`";

//$query = mysql_query ($sql) or die (mysql_error());
//echo "test";
foreach($this->db->fetch_row_assoc($sql) as $records) {
//while ($records = $this->db->fetch_row_assoc($sql)) {
    $alpha[$records['alpha']] += 1;
    ${$records['alpha']}[$records['id_clients']] = array(
        $records['first_name'],       //item[0]
        $records['subMiddleName'],    //item[1]
        $records['last_name'],        //item[2]
        $records['address'],          //item[3]
        $records['primary_number'],   //item[4]
        $records['secondary_number'], //item[5]
        $records['home_number'],      //item[6]
        $records['office_number'],    //item[7]
        $records['cell_number'],      //item[8]
        $records['fax_number'],       //item[9]
        $records['ext_number'],       //item[10]
        $records['other_number'],     //item[11]
        $records['comments'],         //item[12]
        $records['type']              //item[13]
    );
}

Если я использую цикл while, моя страница блокируется и выдает ошибку Fetal Error с сообщением тайм-аута 60 секунд.Если я использую цикл foreach, то, похоже, он проходит, но теперь мои результаты ... странные ...

Эти результаты получены при использовании цикла foreach с запросом PDO

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
B

B B B


B


primary: (B)


secondary: (B)


B
E

E E E


E


primary: (E)


secondary: (E)


E
O

O O O


O


primary: (O)


secondary: (O)


O

Это результаты, которые я должен получить.Эти результаты получены при использовании цикла while с запросами mysql

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
O

Eli O Orellana


5542 Crossover Prk


primary: 000.000.0000 (cell)


secondary: 000.000.0000 (home)


Buyer

Sandra Y Orellana


123 Maple Ln


primary: 000.000.0000 (cell)


secondary: 000.000.0000 (home)


Seller

Josue Orellana




primary: (Home)


secondary: (Cell)


Buyer

РЕДАКТИРОВАТЬ: Остальная часть кода

// Create Alpha link Listing
foreach(range('A','Z') as $i) {
    echo (array_key_exists ("$i", $alpha)) ? '<a href="#'.$i.'" title="'.$alpha["$i"].' results">'.$i.'</a>' : "$i";
    echo ($i != 'Z') ? ' | ':'';
}

// Create Data Listing
        foreach(range('A','Z') as $i) {
            if (array_key_exists ("$i", $alpha)) {
                echo '<div class="alpha"><span class="expand-alpha-up"></span><a href="#" name="'.$i.'">'.$i.'</a></div><div class="show">';
                foreach ($$i as $key=>$item)
                    echo '
                    <table cellpadding="0" cellspacing="0" width="99%">
                        <tr>
                            <td class="td-name"><p><a href="#" id="'.$key.'">'.Truncate($item[0].' '.$item[1].' '.$item[2], 17, true).'</a></p></td>
                            <td class="td-address"><p>'.Truncate($item[3], 20, true).'</p></td>
                            <td class="td-contact"><p>primary: '.($item[4] == 'home' ? $item[6] : ($item[4] == 'office' ? $item[7] : ($item[4] == 'cell' ? $item[8] : ($item[4] == 'fax' ? $item[9] : ($item[4] == 'other' ? $item[11] : ''))))).'<i> ('.$item[4].')</i></p></td>
                            <td class="td-contact"><p>secondary: '.($item[5] == 'home' ? $item[6] : ($item[5] == 'office' ? $item[7] : ($item[5] == 'cell' ? $item[8] : ($item[5] == 'fax' ? $item[9] : ($item[5] == 'other' ? $item[11] : ''))))).'<i> ('.$item[5].')</i></p></td>
                            <td class="td-type"><p><strong>'.$item[13].'</strong></p></td>
                        </tr>
                    </table>';
            }
            echo '</div>';
        }
    }
}

Также мой метод fetch ()

public function fetch_row_assoc($statement) {
    self::$PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        try
        {
            $stmt = self::$PDO->query($statement); 
            //$stmt->setFetchMode(PDO::FETCH_ASSOC);
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            return $result;
        }catch(PDOException $e){
            echo $e->getMessage();
        }
        return false;
    }

1 Ответ

0 голосов
/ 25 марта 2011

Попробуйте использовать этот вспомогательный класс PDO: Класс помощников PDO на Github

Передайте строку запроса в getQuery ()

require_once("Database.php");
$db = new DB;

$data = $db->getQuery($sql);

foreach($data as $d)
{
    $d['first_name']; // etc
}

, посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...