- > fetch_object()替代或诊断排名系统

时间:2015-01-10 18:52:45

标签: php mysql

我最近开始使用PHP来实现基本排名系统。这是我的代码:

review.php

<?php 
require 'connect.inc.php';
mysql_select_db("conference");
$query = mysql_query("SELECT * FROM event");
$event = [];

while($row = mysql_fetch_array($query)){
    $event [] = $row;
}
?>
<?php foreach($event as $events): ?>
        <div class="event">

        <h3><a href="event.php?id=<?php echo $events['eventID'];?>"><?php echo $events['eventName'];?></a><h3>
        <div class="event-rating"> Rating: x/5</div>
        </div>
    <?php endforeach;?>

event.php

<?php 
require 'connect.inc.php';
$event= null;

if(isset($_GET['eventID'])){
    $id=(int)$_GET['eventID'];
    $event = mysql_query("SELECT * FROM event WHERE eventID = {$id}")->fetch_object();
}   
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    <?php if($event):?>
        <div class="event">
            This is Event "<?php echo $event['eventName'];?>"
            <div class="event-rating"> Rating: x/5</div>
            <div class="event-rate"> Rating: x/5</div> Rate this Event:
            <?php foreach(range(1,5)as $rating):?>
                <a href=""><?php echo $rating; ?></a>
            <?php endforeach ?>
        </div>
            <?php endif;?>
    </body>
</html>

我遇到的问题是没有任何内容输出到网页上,而它应显示1到5的评级页面。我认为问题出在 - &gt; fetch_object(); 行中因为这之前一直是我的问题,所以我使用了mysql_fetch_array之类的替代品。

我也尝试过使用PDO和mysqli连接重新开始,但仍然没有运气。

如果有人能提供任何建议,我们将不胜感激。

此外,如果有人可以解释 - &gt; fetch_object(); ,那将非常有用,因为在线没有太多解释。

1 个答案:

答案 0 :(得分:1)

好的,这个将是一个难以解释的问题,因为看起来好像你对PHP的mysql_*函数的工作方式没有基本的了解。

在PHP中,->运算符用于访问Object类型的属性和函数。 mysql_query()返回Resource Identifier,它不能用作PHP中的对象。相反,您需要使用过程mysql_fetch_object( $result );函数。但是,稍后在代码中,您尝试将返回的对象用作数组,例如:

This is Event "<?php echo $event['eventName'];?>"

您面临的下一个问题是the mysql_* family of functions is now deprecated,很快就会从新版本的PHP中消失。因此,您最好使用其中一个较新的库,例如PDO。

您的代码可以在PDO中重写,我已经花时间为您做了这些:

<?php
$db = new PDO('mysql:dbname=conference;host=127.0.0.1', 'username', 'password');
$result = $db->query( 'SELECT * FROM event' );

while( $event = $result->fetchObject() ):
?>
    <div class="event">
        <h3><a href="event.php?id=<?php echo $event->eventID ?>"><?php echo $event->eventName ?></a><h3>
        <div class="event-rating"> Rating: x/5</div>
    </div>
<?php endwhile ?>

同样,在event.php内,您应该使用Prepared Statements来阻止对您网站的SQL injection攻击。例如:

<?php 
$db = new PDO('mysql:dbname=conference;host=127.0.0.1', 'username', 'password');

if( isset($_REQUESR['eventID']) )
{
    $sql = $db->prepare( 'SELECT * FROM event WHERE eventID = :eid' );
    $sql->execute( array(':eid' => $_REQUEST['eventID']) );
    $event = $sql->fetchObject();
}   
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    <?php if($event):?>
        <div class="event">
            This is Event "<?php echo $event->eventName ?>"
            <div class="event-rating"> Rating: x/5</div>
            <div class="event-rate"> Rating: x/5</div> Rate this Event:
            <?php foreach(range(1,5)as $rating):?>
                <a href=""><?php echo $rating; ?></a>
            <?php endforeach ?>
        </div>
            <?php endif;?>
    </body>
</html>

希望上述友好建议能帮助您通过PHP学习和开发。