foreach循环不进入

时间:2017-05-23 04:04:16

标签: php sql loops debugging foreach

我的目标是按国家/地区的字母顺序打印国家/地区名称。这是我为此写的函数......

function getCountries(){
    $namesQ = 'SELECT Name FROM `country` ORDER BY Name ASC';
    global $myPdo;
    $command = $myPdo -> prepare('namesQ');
    $command -> execute();  
    return $command;    
}  

然后,我在HTML中回显一个数组中的名字......

<!DOCTYPE html>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Country Names</title>

        <link type="text/css" rel="stylesheet" href="primary.css" />
    </head>

    <body>
        <div id="main" action="controller.php" method="post">
            <?php
                $countries = getCountries();
                $countryNames = $countries->fetchAll();

                foreach( $countryNames as $countryName )
                {
                    echo 'test';
                    echo '<p> ' . $countryName['Name'] . '</p>';
                }
            ?>
        </div>
    </body>
</html>

但似乎根本没有访问foreach循环,因为即使......

 echo 'test';

...不会打印到屏幕。

我将$countryName中的索引更改为fhsdjk,因为没有这样的索引,但我甚至没有收到错误消息或任何内容。我怎样才能将echo循环中的任何内容foreach传递给它?

2 个答案:

答案 0 :(得分:1)

你传递的字符串需要传递变量

next

答案 1 :(得分:0)

看来,您正在准备字符串'namesQ',但实际上您想要准备分配给$namesQ的sql语句。所以,替换

$command = $myPdo->prepare('namesQ');

$command = $myPdo->prepare($namesQ);

我建议您将fetchAll()来电添加到getCountries()功能中,然后致电:

$countryNames = getCountries();

而且,由于您在发现db-access错误时遇到了一些问题,我建议您始终实现异常处理。特别是当您使用PDO作为数据访问抽象时。这是一个例子 - 与你的代码类似:

function getCountries() {
    try {
        $namesQ = 'SELECT Name FROM `country` ORDER BY Name ASC';

        global $myPdo;

        // Hier: replaced 'namesQ' with $namesQ.
        $command = $myPdo->prepare($namesQ);

        if (!$command) {
            throw new Exception('The SQL statement can not be prepared!');
        }

        if (!$command->execute()) {
            throw new Exception('The PDO statement can not be executed!');
        }

        return $command->fetchAll();
    } catch (PDOException $pdoException) {
        echo '<pre>' . print_r($pdoException, true) . '</pre>';
        exit();
    } catch (Exception $exception) {
        echo '<pre>' . print_r($exception, true) . '</pre>';
        exit();
    }
}

关于异常处理,也许我的早期答案也会有所帮助:

Exception handling for PDO::prepare() and PDOStatement::execute() + A generalized exception handling scheme