2012-09-14 30 views
0

我有下面的代码工作:mysql_fetch_array()的作品,但mysql_fetch_object()不

$date1 = mysql_query("SELECT date1 FROM Users WHERE username='".$_SESSION['username']."'") 
    or die(mysql_error()); 
while($row = mysql_fetch_array($date1)){ 
    $lastViewedDate = $row[0]; 
} 

但是,当我尝试使用mysql_fetch_object我得到一个内部服务器错误500

$date1 = mysql_query("SELECT date1 FROM Users WHERE username='".$_SESSION['username']."'") 
    or die(mysql_error()); 
while($row = mysql_fetch_object($date1)){ 
    $lastViewedDate = $row["date1"]; 
} 

我宁愿将来使用这些对象,但我不明白他们为什么不工作。任何帮助,将不胜感激。

+3

请不要使用'mysql_ *'函数来编写新的代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。请参阅* [红盒子](http://goo.gl/GPmFd)*?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 –

+1

将用户数据直接插入到查询中是一个非常糟糕的主意。始终使用由'mysqli'或PDO支持的SQL占位符。 – tadman

回答

4

随着fetch_object语法是:

$row->date1 

与FETCH_ASSOC语法是:

$row["date1"] 

也请..因为这是神圣的一切..打开E_NOTICE错误消息和display_errors

+0

感谢您的信息。作为一个PHP noob,我甚至不知道E_NOTICE错误。我查了一下,看起来我只需要在脚本的开头调用它。 error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);那是你在说什么? – FuegoFingers

+1

@FuegoFingers:是的,这个电话会有帮助。放入你的php.ini会更好,因为在你有机会调用这个函数之前,某些错误可能已经被触发了。 – Evert

+0

好的会做的。感谢您的信息和帮助。 – FuegoFingers

1

您没有正确访问您的对象时,它会是这样:

$date1 = mysql_query("SELECT date1 FROM Users WHERE username='".$_SESSION['username']."'") 
    or die(mysql_error()); 
while($row = mysql_fetch_object($date1)){ 
    $lastViewedDate = $row->date1; 
} 

注意使用对象属性访问的->

+0

不知道为什么这是downvoted。 –

+1

可能是因为它继续*促进*一个SQL注入漏洞..将是我的猜测。其他答案只是简单地省略显示/谈论它,因此不会“推销”这样的代码,即使它们不“阻止”它。 – 2012-09-14 19:23:14

+0

我觉得这个问题更多的是关于访问对象的属性而不是数据库访问方面。因此,我只是复制了OP的代码,只做了一次更改。对这个问题的评论已经使典型的“不使用mysql- *”的建议。 –

1
$lastViewedDate = $row["date1"]; 

这不是你如何访问对象的变量;试试这个:

$lastViewedDate = $row->date1; 
相关问题