【问题标题】:Problem when going online (php codes)上网时出现问题(php代码)
【发布时间】:2011-01-08 23:17:17
【问题描述】:

自从我上线以来,我的 php 脚本出现了很大的问题。有些请求被执行了,有些则没有……但是当我用 Wamp 测试它时,一切都很好。

让我给你看一个例子:

$answer = $db -> query("SELECT ID FROM users WHERE ID='{$_SESSION['id']}';");

$data = $answer->fetch();

if ($data['ID']=="") 

{

$req= $db->prepare('INSERT INTO users(ID, etat) VALUES(:ID, :state)');

$req->execute(array(
                    'ID'=>session_id(),
                    'state' => 'NORMAL',
                    ));
}

else

{

$db->exec("UPDATE users SET state='NORMAL' WHERE ID='{$_SESSION['id']}';");

}

这里条件被忽略,只执行插入到。当我重新加载页面时,insert to 将再次执行,而不是 else。

你有什么想法吗?

我以为可能是php.ini配置的问题。但是我唯一需要替换的 php.ini 是 Wamp 的,我不知道如何适应它......

【问题讨论】:

  • 用英文命名变量/列通常会有很大帮助(因为这里懂英语的人比懂法语的人多)。我无法帮助您解决问题,但如果我的意图正确,您可以使用 INSERT ... ON DUPLICATE KEY UPDATE 将您的代码简化为单个查询。
  • 你说得对,我现在已经翻译了,但我希望我在翻译时没有犯任何其他错误。我要看看“on duplicate”的用法。
  • 你确定 $_SESSION['id'] 里面有什么吗,也许错误发生在你的测试之前并且 SQl 不是假的,只是你的会话数据从未设置(或者会话是在请求之间丢失,请检查您是否每次都没有新的 cookie)

标签: php pdo wamp


【解决方案1】:

$_SESSION['id'] 是一个名为“id”的会话变量。 session_id() 返回会话 ID。而且它们不一样。 SELECT ID FROM users WHERE ID='{$_SESSION['id']}'; 不会返回与 SELECT ID FROM users WHERE ID='{session_id()}'; 相同的值您需要插入 $_SESSION['id'] 或选择 id ==session_id() 的记录。

【讨论】:

  • 谢谢亚历克斯,但是为什么它在上线之前就起作用了?在我的页面顶部我写了: $_SESSION['id']=session_id() 所以它应该改变'id'?
  • 如果你有那条线 ($_SESSION['id']=session_id() ) 你应该没问题。我刚刚注意到选择和插入之间的区别。确保记录确实被插入,并且每次加载后不要重新启动会话。
【解决方案2】:

好的,我发现了那个问题。事实上,当我复制我的 SQL 数据库时,我忘记像 Wamp 那样设置主键...我不知道确切原因,但它现在工作正常...

在回复您之前,我将调查其他问题!

非常感谢大家的宝贵时间!

【讨论】:

  • 在这种情况下,你应该删除你的问题,或者至少接受你自己的答案,这样其他人才能知道你的问题已经解决了。
  • 我必须等待 2 天才能接受它,我不想删除它。谢谢马特
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多