0

好的。我查看了整个网站,我不断接近,但没有雪茄……其他人的“多行返回”问题都有一个共同点,而我的则没有……它们是具有不同值的行用于查询的列...我有一个数据库,它将事件日期信息返回到 PHP 日历...数据库已设置,我已设置日历,查询正常...但是仅当指定日期只有一个事件...如果数据库中该日期有 2 个事件,则查询仅返回第一个事件...我需要知道如何查询:

SELECT * FROM CraftShows WHERE Date = $date

...然后(假设从该查询返回 2 行...)将返回的两行放入单独的变量中,在另一个数组中以便于访问...

最好:第一行进入$show[0],第二行进入$show[1]...

这样之后,我可以在我的日历 PHP 文件中编写一个 while 循环,该循环遍历数组,将行回显到一个<TD>元素中......

我希望我有一个我所拥有的片段,但我把它全部弄乱了,它完全搞砸了。我会在重试时发布此帖子,然后在第二次尝试时更新此帖子...我希望这足够清楚...提​​前感谢您的任何帮助。干杯!

-安德鲁

附录:

这是有效的代码,但如果数据库中有多个匹配的事件,则仅返回第一个事件$showdate...

while ( $day_num <= $days_in_month ) {

$showdate = $year . "-" . $month . "-" . $day_num;

$showdata = mysql_query("SELECT * FROM CraftShows WHERE Date = '$showdate'");

$row = mysql_fetch_array($showdata);

echo "<td id = 'caldata' height=240px width=120px valign = 'top'> $day_num <br> $row[0]

<br> $row[1] <br> $row[3] </td>";

$day_num++;

$day_count++;

if ($day_count > 7) { echo "</tr><tr>"; $day_count = 1; }

}

4

1 回答 1

-1

如果您使用的是 PHP,您可能需要以下内容:

$dbh = Database::connect();
$query = "SELECT * FROM CraftShows WHERE Date = ?";
$sth = $dbh->prepare($query);
$sth->execute(array($date));    
for($i=0 ; $i<$sth->rowCount() ; $i++){
    $show[$i] = $sth->fetch();
}
return $show;

OBS:CraftShows例如,如果您的表有列和a,那么 的每个元素将是一个包含 3 个元素(和)的数组。例如,将包含查询中获取的第三行的字段。bc$showabc$show[2]["b"]b

OBS2:Database应该是与您的数据库连接的 PHP 类。就像是:

class Database {

    public static function connect() {
        $dsn = 'mysql:dbname=name_here;host=host_here';
        $user = 'username_here';
        $password = 'password_here';

        try {
        $dbh = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
        echo 'Connection Failed : ' . $e->getMessage();
        exit(0);
        }
        return $dbh;
    }
}

更新:随着您的代码更新,您可能想试试这个:

   $return = array();
   $i=0;
   while($row=mysql_fetch_array($showdata)) {
       $return[$i] = $row;
       $i++;
   }

结果将在$return

于 2013-07-29T23:20:25.370 回答