2011-04-16 103 views
0
if (isset($_SESSION['user_tz'])) { 
     $posted = "CONVERT_TZ(p.posted_on, 'UTC', '{$_SESSION['user_tz']}')"; 
    } else { 
     $posted = 'p.posted_on'; 
    } 

    // Run the query: 
    $q = "SELECT t.subject, p.message, username, DATE_FORMAT($posted, '%e-%b-%y %l:%i %p') AS posted FROM threads AS t LEFT JOIN posts AS p USING (thread_id) INNER JOIN users AS u ON p.user_id = u.user_id WHERE t.thread_id = $tid ORDER BY p.posted_on ASC"; 

我把查询中的$ posted改成了一个普通的“posted_on”,它返回了时间,我也尝试了一些将它包装在“'和”“中,但那些结果完全打破了它;为了将来的参考,我想知道为什么变量没有传递给查询。这可能是一件非常简单的事情,我会感到很无聊,但帮助将非常感激。SQL查询中的变量无法正常工作?

谢谢。

+0

你的语法看起来不错。您的错误可能存在于代码中的其他地方。如果在同一个地方用'echo $ posted'替换'$ q = ...'行,会发生什么? – njbair 2011-04-16 01:15:07

+0

我收到'CONVERT_TZ(p.posted_on,'UTC','')',你说得对我有'$ _SESSION ['user_tz'] ='';'在一个包含文件中,但是我将它设置为NULL,那么我得到了一个未定义的变量错误,如果$setS ['user_tz'] = NULL,将不会设置'$ posted = p.posted_on';' ? – aph107 2011-04-16 01:25:29

回答

1

NULL是isset()触发TRUE的有效值。使用unset($_SESSION['user_tz']);

+0

好人!谢谢 – aph107 2011-04-16 01:35:16

-1

在我看来,你写它的方式,它使用$ posted作为值传递给date_format。您真正想要的是$ posted的内容,因此您需要关闭它周围的引号并将该值连接到$ q字符串中。

+0

查询字符串使用双引号,这意味着PHP将解析字符串内的任何变量。单引号需要连接。 – njbair 2011-04-16 01:22:56