MySQL 资源、fetch() 和循环


MySQL resource, fetch(), and looping

在过去的几天里,我一直在试图理解这段代码。 这是关于从数据库表中检索数据没有什么困难(我正在使用MySQL)。 但我正在尝试理解代码。 这是代码:

<?php
include 'PDOconnect.php';
//Query
$result = $connection->query('SELECT * FROM video_games');
//Fetch
$data = $result->Fetch();
while ($data = $result->Fetch()) {
echo $data['name']."<br />";
}
?>

首先让我解释一下,第二行包括数据库的连接代码 我正在使用PDO连接方式。 连接很好. 我的表叫做video_games,它有一列叫做"name"。 我正在尝试使用此代码从"name"列中检索所有数据。

1-所以我想了解的是$result变量是什么(第 6 行),我听说它是一个资源。 MySQL中的资源是什么意思,变量$result里面有什么是整个表还是到底是什么?

2-函数fetch()是做什么的?? 这很令人困惑.

3-我从研究PHP的基本语法中了解到的是,在while条件中该值必须为 true 才能执行其中的代码。但这里有($data = $result->Fetch())。

4- fetch() 方法是否自动递增? 我的意思是为什么它在 while 条件下成功工作,所以它必须一遍又一遍地递增??

请帮助我现在的头脑正在爆炸。

$result 不是资源,而是PDOStatement。 请参阅文档:http://www.php.net/manual/en/pdo.query.php

一旦执行了PDOStatement(自动使用 - >query()),该语句将保存数据库返回的结果。

每次->fetch()时,它都会返回语句指向的当前行。之后,它将指针指向下一行(所以是的,"自动递增"。

现在,您的代码:

ifwhile语句中的所有内容都使用松散比较 (==) 进行评估

if ( $a )实际上检查或$a == true.

$data = $result->fetch()只是将一个值设置为 $data 。然后同时检查或$data == true.如果是这样,它就会做它必须做的事情。 (请参阅 php == vs === 运算符以获取有关 PHP 中比较的更多信息)

现在,对您的代码进行一些评论:第一行不会输出,因为您不会对第一个获取的结果执行任何操作。只需删除

//Fetch
$data = $result->Fetch();

所以你的代码将变成:

<?php
include 'PDOconnect.php';
//Query
$result = $connection->query('SELECT * FROM video_games');
while ($data = $result->Fetch()) {
echo $data['name']."<br />";
}

关于PDO的好教程:http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

1 什么是$result变量

它不是一种资源。它实际上是PDOStatement类的对象

2 函数 fetch() 是做什么的?? 这令人困惑。

手册页随时为您服务。只需在浏览器的地址栏中输入PDO fetch,然后单击打开的第一个链接。它非常简单,功能同样强大。