Mysql'AND'和'OR'vsprintf():参数太少

时间:2019-05-28 22:01:39

标签: php mysql

因此,我想显示一个简单的私人消息页面,其中包含消息本身以及发送消息的人或发送给谁的人。 这是我写的查询。

SELECT * 
FROM privatemessages,users 
WHERE pmid = 'messageid' 
AND (privatemessages.fromid = users.uid AND privatemessages.toid = 'myuserid') 
OR (privatemessages.toid = users.uid AND privatemessages.fromid = 'myuserid') 
LIMIT 1

在使用PHP执行时,出现此错误:

Warning: vsprintf(): Too few arguments in...

但是如果我运行以下命令,

SELECT * 
FROM privatemessages,users 
WHERE (privatemessages.fromid = users.uid AND privatemessages.toid = 'myuserid') 
OR (privatemessages.toid = users.uid AND privatemessages.fromid = 'myuserid') 
LIMIT 1

查询运行正常。 我在这里做什么错了?

1 个答案:

答案 0 :(得分:-1)

我怀疑vsprint的一些怪癖(无论是什么)。

FWIW,我们在1992年左右就停止以这种方式编写查询,而新方法(在我看来)更易于阅读。所以来吧。加入我们:

SELECT columns
     , you
     , actually 
     , want
  FROM privatemessages m
  JOIN users u
    ON (m.fromid = u.uid AND m.toid = 'myuserid') 
    OR (m.toid = u.uid AND m.fromid = 'myuserid') 
 ORDER 
    BY something 
 LIMIT 1