gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:18 26 4
gpt4 key购买 nike

我看过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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com