MySQL内部会话检查?

时间:2011-09-17 20:43:53

标签: php mysql

这个问题听起来很简单,但我找不到错误: 我的PHP脚本将文本发布到MySQL数据库。这由用户管理系统支持。因此,只有发布文本的用户才能看到它。现在我想整合一个“共享功能”。用户a使用户b能够在他的文本概述中看到用户的一个帖子(有点像笔记共享功能)。

在与用户b共享笔记后,他可以在其概述中看到该笔记,但在打开笔记时查看其不起作用的详细信息。

在技术方面,我有3张桌子:
1.)注释 - 字段标题,文本和用户
2.)用户 - id,名称和密码
3.)邀请 - NoteID,fromID和toID

邀请概述的我的SQL语句是(正在运行):

SELECT * FROM notes a, invites b WHERE (b.toID = '$UserID') AND (b.ItemID = a.id) AND a.Deleted = 0

但是当我有这个陈述时

SELECT * FROM notes a, invites b WHERE (a.id = '$ItemID') AND ((a.User = '$username') OR (b.toID = '$userid'))

在详细视图中它不起作用。即使我有这个非常简单(和不安全)的SQL它也不起作用:

SELECT * FROM notes WHERE ID = '$ItemID'

我非常绝望,我唯一的解释(这是非常不现实的)是MySQL有一种内部安全检查,不允许显示来自陌生人的内容:S

任何想法?非常感谢

1 个答案:

答案 0 :(得分:1)

我不确定这是你唯一的问题,但是你偶然会进行交叉连接。 MySQL可能会尝试在结果集中创建大量行,然后超时。使用JOIN ... ON ...语法可以帮助您记住指定要执行连接的方式:

SELECT *
FROM notes a
JOIN invites b
ON ... -- put some join condition here
WHERE (a.id = '$ItemID') AND ((a.User = '$username') OR (b.toID = '$userid'))

我猜你想要这样的东西:

ON b.NoteID = a.ID