-3

我有一张桌子。它看起来像这样:

CREATE TABLE joke
(sn INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, jokes VARCHAR(255) NOT NULL UNIQUE
);

表中当前有五行。

在我的网页中有 5 个文本区域。我想将每个笑话提取到文本区域。

我已经通过这种方式做到了,但我认为这不是一个好方法。还有其他方法吗?

<?php
$sql=myql_query(SELECT jokes FROM tbl_jk WHERE sn=1;)
?>
<?php
$sql1=myql_query(SELECT jokes FROM tbl_jk WHERE sn=2;)
?>
<textarea cols="10" rows="5"><?php echo $sql ?></textarea>
<textarea cols="10" rows="5"><?php echo $sql1 ?></textarea>
<textarea cols="10" rows="5">Jokes no3</textarea>
<textarea cols="10" rows="5">Jokes no4</textarea>
<textarea cols="10" rows="5">Jokes no5</textarea>

我是这样写的。这样,如果我有 100 个笑话,我必须写 100 次,所以对我来说有任何套件想法.. 我是初学者,所以很简单 plz

4

2 回答 2

2
$db = new PDO("database", "username", "password");
$statement = $db->prepare("SELECT jokes FROM tbl_jk LIMIT 100");
$statement->execute();
foreach ($statement->fetchAll() as $joke) {
    echo '<textarea cols="10" rows="5">' . $joke['jokes'] . '</textarea>';
}

将上面的内容放在您的 php 标记中,并用您各自的输入替换 PDO 输入。如果你想要全部或只想要这么多,LIMIT可以拿走。

编辑:更多解释:

  • $db使用 PHP PDO 类创建到您的特定数据库的新连接。

  • prepare记录您的初始查询,在这种情况下是一个语句,可以使用该方法SELECT将值放在以后(通过execute()) 。:variable

  • execute()可以接受输入来替换:variable占位符,但否则只会执行您之前在现有$db连接上准备的查询。

  • fetchAll()将从先前的execute()设置中检索到的所有行返回给变量$joke。然后可以通过以下方式访问您的列$joke['column_name']

PDO中有多种类型fetch(),请在此处阅读 PDO:http: //php.net/manual/de/book.pdo.php

于 2013-09-20T09:22:05.733 回答
1

尝试一次选择所有笑话,而不是为每个笑话创建一条 SQL 语句。您可以限制您选择只选择表的前 5 个。或者,当您有日期字段时,您可以对它们进行 ASC 或 DESC 排序。

$sql = "SELECT jokes FROM tbl_jk LIMIT 0,5";

然后使用循环然后将其放入您想要的文本区域。

foreach ( $statement->fetchAll() as $jk){
    echo '<textarea cols="10" rows="5">'. $jk .'</textarea>';
}

也许是因为您对 PHP 和 SQL 不熟悉,所以我可以给您一个关于输出的示例:

$jokes = Array(
              '1' => 'Joke 1',
              '2' => 'Joke 2',
              '3' => 'Joke 3',
              '4' => 'Joke 4',
              '5' => 'Joke 5'
              );
    You should receive some array like this from you database, after that we loop over them all and we put them into the textarea. 

    foreach ( $jokes as $jk){
      echo '<textarea cols="10" rows="5">'. $jk .'</textarea><br />';
    }

尝试使用 PDO 而不是 mysql_query。fetchAll 是做什么的?

PDOStatement::fetchAll()返回一个包含结果集中所有剩余行的数组。该数组将每一行表示为列值数组或具有与每个列名称对应的属性的对象。如果要获取的结果为零,则返回一个空数组,如果失败则返回 FALSE。

于 2013-09-20T09:23:42.940 回答