你能帮我理解这个php脚本吗?

时间:2011-07-11 11:55:03

标签: php

我是一个相当新手的php编码器,在教程中得到这个PHP代码来创建一个随机生成的引用,但我并不完全理解代码

特别是,我不明白

a)第4行 - “行”来自何处。这是一个当场制作的名字。它可以很容易被称为“法拉利”

b)第9行 - “storedtext”来自哪里?它只是当场弥补?

c)基于代码,您是否知道数据库应该是什么样子。它只是一个名为“text”的数据库,里面有一个名为“quotables”的表吗?

    <?  
    // 
    // count() gets the number of rows from database text-- 
    //it assigns a number to rowcount
 1   $rowcount = mysql_query("select count() as rows from text");

    // don't understand what exactly is happening here, where did "rows" come from
 2  while ($row = mysql_fetch_assoc($rowcount))
 3   {
 4       $max = $row["rows"];
 5   }

    // Selects an item's index at random    
 6   $rand = rand(1,$max)-1;
    //there is a database table called "quotables?" taking one random row
 7   $result = mysql_query("select from quotables limit $rand, 1");

 8   $row = mysql_fetch_array($result);
//where does "storedText" come from?????
 9   $randomOutput = $row['storedText'];

 10   echo '<p>' . $randomOutput . '</p>';
 11   ?>

10 个答案:

答案 0 :(得分:3)

  

“行”来自哪里?

这是分配给SQL查询select count() as rows from text中的值的名称。

  

“storedtext”来自哪里?

它似乎是quotables表中字段的名称。

  

基于代码,你知道数据库应该是什么样子。它只是一个名为“text”的数据库,里面有一个名为“quotables”的表吗?

没有。我们不能对数据库名称说什么。但是此数据库包含表textquotables,其中后者至少包含字段storedText

答案 1 :(得分:2)

a)是的。 b)它必须是数据库中的一列。在第7行,它正在拉动数据库中的所有列,但并不具体说明它的名称 c)不,你可以print_r($ row)来查看表结构(将打印出数组,显示所有列)。您还应该有权访问数据库(为了完成这项工作,您需要设置数据库和表),所以mysql_connect()和mysql_select_db()会告诉您主机/数据库的名称。

答案 2 :(得分:1)

a)行来自sql query "select count() as rows from text"

b)我认为第7行中有“*”因为没有指定列,所以如果*那么它选择该表中的所有列并且“storedText”就是其中的一列

c)文本,引用均为表格

答案 3 :(得分:1)

a)rows来自SQL查询:

$rowcount = mysql_query("select count() as rows from text");

这是给count()列的名称。

b)storedTextquotables表中的一列,可能带有引号。

脚本的作用是从文本表中获取行数。 获取1到$ max范围内的随机数。 从quotables表中获取相应的报价。

答案 4 :(得分:1)

A)rows是第1行mysql查询中count()函数的别名。如果你将第1行中的行更改为ferrari然后将第4行中的行更改为ferrari,那么它仍然有用。

B)存储的文本来自第7行的第二个mysql查询。这将是该表中列的名称。

C)根据您提供的代码,我可以告诉您,您有一个我不知道名称的数据库,该数据库有两个表,一个名为text,另一个名为quotables我可以告诉你,quotables有一列名为storedText

答案 5 :(得分:0)

除了quotables是一个表并且storedText是一个列之外,SQL没有告诉我们任何内容。字符串中的名称显示在SELECT语句中,并在完成时存在。

答案 6 :(得分:0)

“rows”来自mysql表。这是列的名称。例如,如果你有两列的表,其中一个名为“price”,你应该在使用mysql_fetch_assoc后使用$ var ['price']。 'storedText'一样。

答案 7 :(得分:0)

ANS - 1   在while循环中,我们已将值赋给$ row ...

ANS - 2

如果您仔细查看了代码,在第8行,您再次为$ row赋值。 第8行mysql_fetch_array($ result)将以数组格式获取第1行的所有值。

“quotables”表中必须有一个名为“storedText”的列,以便它出现在$ row ['storedText']中。

你应该参考php手册了解mysql_fetch_array和mysql_fetch_assoc函数..

请参阅此网址:http://be.php.net/manual/en/book.pdo.php

答案 8 :(得分:0)

第2行与a)相关

while ($row = mysql_fetch_assoc($rowcount))

只要括号内的表达式求值为真值,while - 构造就会重复。在PHP中;赋值也是一个表达式,它计算分配的值,即$ row。在每次迭代之前,执行该函数并尝试从数据库中检索下一行。当它失败时,它将返回false而不是一行,这反过来使循环结束,因为赋值表达式将评估为false,这是while - 语句的终止条件

  

b)第9行 - “storedtext”来自哪里?它是刚刚在现场组成的吗?

它来自数据库中随机提取的结果。这是一列的价值。

  

c)基于代码,您是否知道数据库应该是什么样子。它只是一个名为“text”的数据库,里面有一个名为“quotables”的表吗?

我们只知道数据库至少有两个表textquotables,后者至少有一列storedText

它做什么

尝试获取随机引用。但是,逻辑不健全,很可能在所有情况下都不起作用。

为什么不对?

基本上,它假设对于text中的每一行,quoteables中只有一个条目。如果是这样的话,首先你不需要两个表。因此,我假设quoteable可以包含任意数量的行,甚至更少,在这种情况下,您有时不会从查询中获得单个结果。这会使您的查询失败并且您的脚本会因为您尝试访问“false [”storedText“]而可以这么说。

答案 9 :(得分:0)

A

$rowcount = mysql_query("select count() as rows from text");
 // the $rowcount is an array, the lines below get the values (that actually is just one)
 // and put into $max variable 
 while ($row = mysql_fetch_assoc($rowcount))
 {
   $max = $row["rows"];
 }

 //get the text from database based on randon limit offet
 $result = mysql_query("select from quotables limit $rand, 1");

 //put the value returned into $row variable
 $row = mysql_fetch_array($result);

 //get the storedText (that is a table column name), and put the value into $randomOutput
 $randomOutput = $row['storedText'];

C:  基于代码,我不能确定什么是数据库模型。

相关问题