我计划使用php中的time()捕获我网站上用户发起的活动的开始和结束。我不确定这是否是捕获开始/结束时间的最佳方法。无论如何,数据将存储在MySQL中,但同样我不确定应该使用哪种数据类型。根据我在stackoverflow上阅读的答案,使用的数据类型取决于应用程序的目的。
申请目的
更多信息 如果重复一项活动,将为其创建新记录。记录将不会更新。
最初,我曾计划在MySQL中存储unix时间戳(作为整数数据类型?),但是据我了解,这是一个坏主意,因为我将失去很多MySQL处理信息的能力。如果我将信息存储为DATETIME,然后又移动服务器,则所有时间都会根据服务器的本地时间而改变。我感到困惑的是,MySQL中的TIMESTAMP与Unix时间戳不同-如果使用time(),我将得到的时间戳。
我知道,对于某些系统,unix时间戳记最多只能保存2038年的日期,但是(现在)这并不重要。
问题:我应该使用time()捕获用户发起的活动的开始和结束时间吗?根据应用程序的目的,what datatype should I use to store the start and stop of user initiated activities?
谢谢
谢谢大家的回答。TBH我还不确定这两种方法,所以我仍在做一些研究。我选择TIMESTAMPS选项是因为我真的很想使用UTC(GMT)存储我的信息。遗憾的是,我将失去一些MySQL的内置时间函数。无论如何,再次感谢您的回答。
我担心当我使用Facebook的提要对话框时,我会将我的应用程序ID公开,从而开放利用.我的App Id公开存在很大风险吗?如果是,那些风险是什么?有什么方法可以最大限度地降低这些风险?
编辑:我一直在寻找的示例使用Javascript SDK,因此获取应用程序ID将相对容易.https://developers.facebook.com/docs/reference/dialogs/feed/
我没有看到使用PHP SDK的任何示例,但我认为App ID仍然存在于URL中.
EDIT2:在这里找到更多信息App_id欺骗和滥用
编辑2:我想使用php5将英文单词转换为unicode数字,然后生成为\ u****其中****是unicode数字.
在我原来的问题中,我错误地认为\ u是编码unicode的标准,实际上它只是在JavaScript中被转义(Thankyou Jukka K. Korpela指出这一点).即使我想在PHP中进行转换,转换后的unicode也会在JavaScript中使用.
我尝试了以下选项,但没有运气.deceze的回答虽然做到了,但非常感谢!
我试过的事情
我已经读过我可以使用iconv来做到这一点,但我没有运气,也找不到任何关于如何做的例子.
我也在这里试过Scott Reynen的代码如何在utf-8字符串中获取给定字符的代码点数?但我似乎无法让它发挥作用.当我尝试它时,我将脚本包含在一个文件中
$str='test';
echo utf8_to_unicode($str);
Run Code Online (Sandbox Code Playgroud)
它刚刚响起test.
我也读过我可以使用的
echo json_encode("test");
Run Code Online (Sandbox Code Playgroud)
但我又一次只能test打印到屏幕上.
任何帮助将非常感激.
EDIT1:实际上我认为它们被称为代码单元而不是代码点.
题
为什么我不能在Joomla 2.5+中使用Jinput获得cookie的价值?
细节
我以前用过
$cookievalue = JRequest::getVar( 'cookievalue', 'valueifnotexist', 'COOKIE' );
Run Code Online (Sandbox Code Playgroud)
但它在joomla 3中被弃用了.
所以我尝试使用Jinput
$jinput = JFactory::getApplication()->input;
$cookievalue = $jinput->get( 'cookievalue', 'valueifnotexist', 'COOKIE' );
Run Code Online (Sandbox Code Playgroud)
注意:根据http://docs.joomla.org/Retrieving_request_data_using_JInput,没有'COOKIE'过滤器.我尝试使用'STRING'作为过滤器,但结果大致相同.我期望获得cookie的值是格式date( 'Y-m-d H:i:s', time() )
结果
当我检查是否已检索到值时,我总是得到'valueifnotexist'我使用了firebug来确认cookie /值是否存在.
在研究如何检测数组中的空值时,我在http://www.php.net/manual/en/function.array-key-exists.php手册页下看到了一些用户的评论.
它说
if (isset(..) || array_key_exists(...))
{
...
}
Run Code Online (Sandbox Code Playgroud)
比做更快
if array_key_exists(...))
{
...
}
Run Code Online (Sandbox Code Playgroud)
发布了100000次运行的基准测试
array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms
Run Code Online (Sandbox Code Playgroud)
我的问题:
是(isset(..) || array_key_exists(...))不是更快array_key_exists()?如果是这样,为什么?
编辑:在写出这个问题时,我想我找到了答案.无论如何,我决定发布这个问题,看看我的想法是否正确.
一次又一次我在Stackoverflow上读到我应该使用PDO来访问MySQL,因为它更安全.我最近使用一些在线教程将一些select和insert语句更改为PDO,并发现它们与我的原始代码非常相似.这让我觉得也许我错过了一些东西.
那么,我的问题是what makes PDO safer than normal mysql?有什么能让这些例子更安全吗?
编辑:我已粘贴下面的插入代码.如果您能看到一些让它更安全的方法,请告诉我.
include 'dataB3S3.php';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
/*** connect to DB ***/
/*** INSERT data ***/
$count = $dbh->exec("INSERT INTO $table(`instance` ,`uid`,`teid`) VALUES (NULL,'$userID','$teid')");
/*** display the id of the last Auto INSERT ***/
$lastInsertValue=$dbh->lastInsertId();
/*** close the database connection ***/
$dbh = null;
}
Run Code Online (Sandbox Code Playgroud) 问题:计算MySQL的持续时间与计算PHP的持续时间(然后存储在MySQL中)相比有什么好处吗?
我打算计算每次活动完成时的持续时间.持续时间将以PHP计算,然后插入MySQL数据库(以及其他数据,如开始时间,结束时间,用户,活动等).
但是,基于这个问题数据库规范化:我如何将数据制成表格?我得到的印象是,不是在插入时记录持续时间,而是应该根据MySQL DB中保存的起始值和结束值来计算它.
这听起来不错吗?如果是,有人可以解释原因吗?是否有任何推荐的方法来计算存储在MySQL中的值的持续时间?
编辑:
用户在线完成活动后,该活动的开始和结束时间将插入到数据库中.我打算使用这些值来计算持续时间(在MySQL中或在插入之前(使用PHP).持续时间稍后将用于其他计算.