mysql插入不起作用

时间:2011-09-30 07:24:45

标签: php mysql

我希望将4个数据插入4个字段并检查其中2个是否存在。 (数据匹配`pid ='1'和sid'123')

这是我的代码,我多次检查过,我的mysql connect很好,我的数据库是正确的,我的table中有这四个字段。但我只是无法插入。没有警告返回页面。

require ("connect.php");// this one I always test on my localhost, no proble, even require on other page, all works well
mysql_select_db("test",$database_link);
mysql_query("SET NAMES utf8");
mysql_query("INSERT INTO user_data (uid, pid, sid, wid)  SELECT  '123456', '1', '123', '2' FROM dual WHERE not exists (SELECT pid,sid FROM user_data WHERE user_data.pid = '1' AND  user_data.sid = '123')");

看清楚:

INSERT INTO user_data (uid, pid, sid, wid) 
SELECT '123456', '1', '123', '2' 
FROM dual 
WHERE NOT EXISTS
(
    SELECT pid, sid 
    FROM user_data 
    WHERE user_data.pid = '1' 
    AND user_data.sid = '123'
)

错误讯息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pid, sid, wid) SELECT '123456', '1', '123', '2' FROM dual WHERE not exists (SE' at line 1

2 个答案:

答案 0 :(得分:0)

查询在MySQL 5.1.54上运行正常。

来自docs

  

INSERT语句的目标表可能出现在FROM子句中   查询的SELECT部分​​。 (这在一些年长者中是不可能的   MySQL的版本。)但是,您无法插入表格并选择   来自子查询中的同一个表。

     

同时从表中选择并插入表时,MySQL   创建一个临时表来保存SELECT中的行然后   将这些行插入目标表。但是,它仍然是真的   当t是a时,你不能使用INSERT INTO t ... SELECT ... FROM t   TEMPORARY表,因为TEMPORARY表不能被引用两次   在同一陈述中(见第C.5.7.2节,“临时表”)   问题”)。

这可能是原因吗?

答案 1 :(得分:0)

这可能是表上的重复名称问题,请尝试使用别名:

INSERT INTO user_data (uid, pid, sid, wid) 
SELECT '123456', '1', '123', '2' 
FROM dual 
WHERE NOT EXISTS 
(
    SELECT NULL -- don't need to select fields in a NOT EXISTS clause
    FROM user_data u2
    WHERE u2.pid = '1' 
    AND u2.sid = '123'
)