【问题标题】:INSERT IF EXIST UPDATE the table using PHP and Stored ProcedureINSERT IF EXIST UPDATE 使用 PHP 和存储过程的表
【发布时间】:2012-03-30 22:35:07
【问题描述】:

我正在编写 PHP 代码并且遇到查询条件问题。另外,如果您能告诉我如何通过在 Mysql 中使用存储过程来完成此操作,那将非常好。
我的任务是在用户外键不存在时运行 INSERT 查询。如果“User_ID”列中存在用户外 ke,则对其进行更新。
但在这里我可以将唯一条件放在数据库中的“User_ID”列上。因此,不会从数据库中发生重复事件。
以下查询显示此错误
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“WHEN 23 NOT IN (SELECT User_ID FROM VoiceMail) ELSE UPDATE VoiceMail SET Urg”附近使用正确的语法

$result=mysql_query("select * from Users",$con);
while($row= mysql_fetch_array($result))
{
    $info=getVM($row['Ext'],$ast);
    $info[3]=$row['User_ID']; // To insert User_ID from Users table
    $query="INSERT INTO VoiceMail (Urgent, New, Old, User_ID)
            VALUES ($info[0],$info[1],$info[2],$info[3])
            WHEN $info[3] NOT IN (SELECT User_ID FROM VoiceMail)
            ELSE UPDATE VoiceMail SET Urgent=$info[0], New=$info[1], Old=$info[2] WHERE User_ID=$info[3]";
    if (!mysql_query($query,$con))
        {
            die('Error: ' . mysql_error());
        }
        else echo "Database Updated..!";

【问题讨论】:

标签: php mysql database stored-procedures


【解决方案1】:

User_Id 是唯一键吗?如果是这样,您可以使用ON DUPLICATED KEY UPDATE

INSERT INTO VoiceMail (Urgent, New, Old, User_ID)
VALUES ($info[0],$info[1],$info[2],$info[3])
ON DUPLICATE KEY UPDATE Urgent=values(Urgent), New=values(New), Old=values(Old)

【讨论】:

  • 但在这里我可以在数据库中的“User_ID”列上设置唯一条件。所以数据库中不会发生重复事件
【解决方案2】:

只需简单地查询:

$query="REPLACE INTO VoiceMail (Urgent, New, Old, User_ID)
        VALUES ($info[0],$info[1],$info[2],$info[3])";

如果已经存在则替换值,如果不存在则插入新值。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多