有人可以解释这个简单代码背后的原理吗?

时间:2014-06-04 17:52:18

标签: php mysql

我很难理解我用来从mysql数据库中检索结果的一行代码。

我用

连接数据库
<?php
try
{
$pdo = new PDO('mysql:host=localhost;dbname=****', '****',
'****');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$error = 'Unable to connect to the database server.' . $e->getMessage;
echo $error;
exit();
}

这很好。连接有效。

使用此代码来检索结果....

$sql = 'SELECT joketext FROM joke';

$results = $pdo->query($sql);

这也没关系,但后来我使用foreach循环来循环遍历结果集......

foreach ($results as $result){
    $jokes[] = $result['joketext'];
}

然后另一个foreach循环玩$笑话......

foreach ($jokes as $joke) {
echo $joke;
}

现在这一切都有效,它显示了我想从mysql表中获得的笑话文字。但是我不理解这条线......

$jokes[] = $result['joketext'];

这是否意味着我将结果集分配给数组? $ jokes [] =是什么意思?为什么我要这样做?

我以为我正在从数据库表中检索文本字符串。该表具有id,joketext,jokedate和authorid作为列。但是,如果我只选择joketext列肯定会检索所有joketext条目的列表,因此我可以循环使用foreach回显结果?

4 个答案:

答案 0 :(得分:2)

$jokes[]语法将笑话文本字符串附加到$jokes数组。如果数组不存在,则会创建它。

与做法相同:

array_push($jokes, $result['joketext']);

如果您不需要创建新数组,可以直接在$results foreach中使用笑话文字,如果您愿意的话。

答案 1 :(得分:0)

$jokes[] =向数组附加一个新值,与执行$jokes[count($jokes)]相同(不完全正确但是解释它的简单方法)。

从技术上讲,你没有 将所有值都放在一个新数组中,你可以使用原始循环。

array_push具有相同的功能,您可以阅读here

答案 2 :(得分:0)

您的查询只会选择一列joketext,因此您的结果集中不会包含任何其他列数据。

使用$jokes[] = ..是一种为$jokes数组中的新元素赋值的简便方法。你不一定需要这样做。它通常是这样做的,以便您可以在以后根据需要在多个位置使用数据。或者,您可以每次直接使用结果集。这并不常见,因为结果集是一个包含的内容超过实际需要的对象或资源。但是,如果您只是想立即输出笑话文本,那么您可以跳过将它放入一个单独的数组中,并在第一个循环中只是echo $result['joketext'];

答案 3 :(得分:0)

如果我理解正确,那么我相信你是对的。不需要第二个foreach,您可以在第一个echo期间$result['joketext'] foreach并完全跳过第二个foreach

所以删除第二个foreach ($results as $result){ echo( $result['joketext'] ); } 并按如下方式编辑第一个:

{{1}}