1

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


我的代码是:

<?
    $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 块中,但没有报告任何内容(也没有使用我的 log 函数记录到文件中),所以我很茫然。有更多 PDO 经验的人看到我的代码有什么问题吗?

4

3 回答 3

0

我不确定发生了什么,而且我对 PDO 很陌生,所以我不确定如何解决这个问题。

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

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


补充说明:

  • 您正在使用 PHP 短标签<?,请参阅“是否可以使用 PHP 短标签?” 并了解这带来的潜在问题。我们恳请用户在此网站上发布 PHP 源代码时不要使用它们向普通观众解决问题(因为这是本网站的意图)。
  • 您拥有的输出代码不应包含数据库交互。您可以通过仅$rows在其中传递变量并在其周围移动 if 子句来实现此目的。
  • 在 PHP 中,只分配NULL$database变量unset($database);是不必要的。
  • 你根本不需要unset($database);。当您结束脚本时,PHP 会为您清理这些内容。如果你想关闭 PDP 中的数据库连接并且你正在使用 mysql,请参阅“Do SQL connections opens with PDO in PHP have to be closed”,如果你真的需要关闭连接,你可以了解如何做到这一点在这个答案中完成它。
于 2013-05-05T08:07:04.317 回答
-1

我有$GET并且没有$_GET在我的绑定值声明中。确保检查你的下划线,人!

好吧晚安。我起得太晚了。

于 2013-05-05T08:56:27.057 回答
-2

请检查您的

$dns = "mysql:host=localhost;dbname=xxx";
$db = new PDO($dns , 'user' , 'password');

中不应有任何空格$dbs。(例如。$dns = "mysql: host=localhost ;dbname=xxx";

于 2020-02-12T07:59:35.953 回答