php - 为 foreach 提供的参数无效; PDO

标签 php database exception pdo

我看过thisthis ,但这些都对我的情况没有帮助,这就是为什么我有见识地提出一个以前被问过的问题。


我的代码是:

<?
    $getGame = $database->prepare('SELECT * FROM mainSite_games WHERE id=:gameID');
?>
    <div class='container_12'>
        <div id='contentcont'>
            <div id='content'>
            <?
            if (isset($_GET['gameID'])) {
                $getGame->bindValue(':gameID',$GET['gameID'],PDO::PARAM_INT);
                $getGame->execute();
                $rows = $getGame->fetch(PDO::FETCH_ASSOC);

                foreach ($rows as $game) {

                    $gameName = str_replace(' ','_',strtolower(stripslashes($game['gameName'])));
            ?>
                    <section class='<? echo $gameName; ?>'>


                        <h1><? echo stripslashes($game['gameName']); ?></h1>

                        <p><? echo stripslashes($game['gameDesc']); ?></p>


                        <article class='grid_5 alpha' style='float:left;'>

                            <h3><a href='viewQuests.php?gameID=<? echo $game['id'] ?>'>View <? echo stripslashes($game['gameName']); ?> Quests</a></h3>
                            <p>Offers the ability to see the available quests in <? echo stripslashes($game['gameName']); ?> along with information about them and a simple guide to go along with each.</p>

                        </article>


                        <article class='grid_5 omega' style='float:right;'>

                            <h3><a href='viewDB.php?gameID=<? echo $game['id'] ?>'>View <? echo stripslashes($game['gameName']); ?> Database</a></h3>
                            <p>Offers information about <? echo stripslashes($game['gameName']); ?> items, places, and characters. We try to be extensive with our information.</p>

                        </article>


                    </section>

            <?
                }
            } else {
                echo '<h3>Game ID is not set!</h3>;'
                exit();
            }

            ?>
            </div>
        </div>
    </div>
</body>
</html>
<?
    $database = null;
    unset($database);
?>

数据库已初始化并连接到我的 globhead 文件提供的包含中:

$function = new srFunc();
try {
    $database = new PDO('mysql:host=localhost;dbname=expunged;charset=utf8','expunged','expunged',array(
        //database attributes
        PDO::ATTR_EMULATE_PREPARES=>false, //use real prepared statements
        PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, //set errors to kill application
        PDO::ATTR_PERSISTENT=>true //keep the connection open indefinitely
        ));
} catch (PDOException $e) {
    $function->logPDO($e->getMessage());
    exit();
}

logPDO 由我的函数类提供:

public function logPDO($err) {
    try {
        $filename = 'logPDO';
        $filehandle = fopen($filename, 'a');
        fwrite($filehandle,'[ '.date('Y-m-d Ga e').' ]  '.$err."\n\n");
        fclose($filehandle);
    } catch (exception $e) {
        return $e;
    }
}

好的..所以现在我们知道我的代码是如何工作的——在我的 foreach 最上面的代码框中,它在我的错误日志中报告:

Invalid argument supplied for foreach

现在,将 ($rows = $getGame->fetch(PDO::FETCH_ASSOC)) 上面的行更改为 $rows = $getGame->fetchAll(PDO::FETCH_ASSOC) )(添加全部),没有被报告。它只是一个空白页面,我的样式和结构完好无损。

我不确定发生了什么,而且我是 PDO 的新手,所以我不确定如何解决这个问题。

我曾尝试将它包装在 try,catch block 中,但没有任何报告(也没有使用我的日志功能记录到文件),所以我不知所措。有更多 PDO 经验的人会发现我的代码有什么问题吗?

最佳答案

I'm not sure what's going on, and I am very new to PDO, so I'm not sure how to troubleshoot this.

发生的事情是,您得到了一个空的数据库结果。如果您对一个空结果进行 foreach,则没有(零)迭代。因此你看不到输出,因此你看不到错误。这是一个什么都不做的完美编程。

如何排除故障?我认为最好了解空数据库结果和失败的数据库查询之间的区别。例如。只要您有一个选择行的查询,就会有一个带有结果对象的 rowCount() method


补充说明:

  • 您正在使用 PHP 短标签 <? ,请参阅 "Are PHP short tags acceptable to use?" 并了解它带来的潜在问题。在本网站上发布 PHP 源代码时,我们恳请用户不要将其用于向一般观众提出问题(因为这是本网站的目的)。
  • 您的输出代码不应包含数据库交互。您只需在其中传递 $rows 变量并在其周围移动 if 子句即可实现此目的。
  • 仅将 NULL 分配给 $database 变量,这在 PHP 中不是必需的。
  • 您根本不需要 unset($database);。当您结束脚本时,PHP 会为您清理它。如果您想关闭 PDP 中的数据库连接并且您正在使用 mysql,请参阅 "Do SQL connections opened with PDO in PHP have to be closed",如果您真的需要关闭连接,您可以了解如何完成此操作 in this answer to it

关于php - 为 foreach 提供的参数无效; PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382572/

相关文章:

mysql - 在 mysql 控制台中将单词翻译到下一行

sql - Oracle - 重写此查询以不使用子选择的方法?

php - 一个mysql操作中的三个WHERE语句作为一个更好的过滤器是可能的吗?

database - 将数据导出为 C#/VB 格式,以便在 EF Code First 的数据库初始化中使用它们

java - 如何在 DOM 解析 XML 时从空元素中提取属性值?

c# - 防止出现未处理的异常对话框

java permgen 对于 Linux 上的 swing 应用程序内存不足,但在 Windows 上则不然

php - 未找到特征 'Illuminate\Foundation\Bus\DispatchesJobs'

PHP - Stripe Webhook 出现 TLS 错误

php - 从 mysqli 语句结果返回关联数组