Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果记录存在,则更新MySql表或使用PHP插入_Php_Mysql - Fatal编程技术网

如果记录存在,则更新MySql表或使用PHP插入

如果记录存在,则更新MySql表或使用PHP插入,php,mysql,Php,Mysql,我必须检查表forex_rates_new中是否存在记录,我需要检查两个标准,即必须比较机构id和货币名称。如果机构id和货币名称相同,则系统必须更新或插入 forex_rates_new id agency_id currency_name rate 1 1111 aaa 1.898 2 2190 aaa 0.787 如果出现值为111的机构id和美元的货币名称,则在数据库中。下次如果用户输入

我必须检查表forex_rates_new中是否存在记录,我需要检查两个标准,即必须比较机构id和货币名称。如果机构id和货币名称相同,则系统必须更新或插入

forex_rates_new
id  agency_id   currency_name    rate
1   1111          aaa            1.898
2   2190          aaa            0.787
如果出现值为111的机构id和美元的货币名称,则在数据库中。下次如果用户输入与USD相同的值111和货币名称,则记录应进入更新模式或插入。这是我的疑问:

INSERT INTO forex_rates_new (`agency_id`,`currency_name`,`rate`,`logo`,`created_at`) 
VALUES('".$agency_id."','".$currency_name."','".$rate."','".$logo."', now())
谢谢你的帮助

INSERT INTO t1 (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

我在这里向您简单演示如何实现这一点。首先,您需要选择数据。类似这样的操作

"SELECT * FROM request WHERE agency_id='$agency_id' ";
INSERT INTO forex_rates_new (`agency_id`,`currency_name`,`rate`,`logo`,`created_at`) 
VALUES('".$agency_id."','".$currency_name."','".$rate."','".$logo."', now())
$qry=mysqli_query($con,"SELECT * FROM request WHERE agency_id='$agency_id' ");
$rowCheck=mysqli_num_rows($qry);
    if ($rowCheck>0) { // if data exist update the data
        $qry=mysqli_query($con,"UPDATE request SET field name='$value' WHERE agency_id='$agency_id'");  
    }
    else{ // insert the data if data is not exist
        $qry=mysqli_query($con,"INSERT INTO request (field name) VALUES('$value')");
    }
现在检查数据是否存在,并进行更新查询

"UPDATE request SET field name='$value' WHERE agency_id='$agency_id'";
否则就是这样

"SELECT * FROM request WHERE agency_id='$agency_id' ";
INSERT INTO forex_rates_new (`agency_id`,`currency_name`,`rate`,`logo`,`created_at`) 
VALUES('".$agency_id."','".$currency_name."','".$rate."','".$logo."', now())
$qry=mysqli_query($con,"SELECT * FROM request WHERE agency_id='$agency_id' ");
$rowCheck=mysqli_num_rows($qry);
    if ($rowCheck>0) { // if data exist update the data
        $qry=mysqli_query($con,"UPDATE request SET field name='$value' WHERE agency_id='$agency_id'");  
    }
    else{ // insert the data if data is not exist
        $qry=mysqli_query($con,"INSERT INTO request (field name) VALUES('$value')");
    }
您的代码应该是这样的

"SELECT * FROM request WHERE agency_id='$agency_id' ";
INSERT INTO forex_rates_new (`agency_id`,`currency_name`,`rate`,`logo`,`created_at`) 
VALUES('".$agency_id."','".$currency_name."','".$rate."','".$logo."', now())
$qry=mysqli_query($con,"SELECT * FROM request WHERE agency_id='$agency_id' ");
$rowCheck=mysqli_num_rows($qry);
    if ($rowCheck>0) { // if data exist update the data
        $qry=mysqli_query($con,"UPDATE request SET field name='$value' WHERE agency_id='$agency_id'");  
    }
    else{ // insert the data if data is not exist
        $qry=mysqli_query($con,"INSERT INTO request (field name) VALUES('$value')");
    }
请记住,给定的代码容易受到sql注入攻击。这是逻辑 只有这不是完整的代码。要避免sql注入攻击,请使用 准备好的发言

如果
存在,则通过
检查
true
false

给你

<?php    
        $dupl = mysqli_query($con, "SELECT * FROM forex_rates_new WHERE currency_name='$agency_id'") or die(mysql_error($con));

        $row = mysqli_num_rows($dupl);
        if ($row > 0)
        {
            echo "<script language='javascript'>alert('Exists!!!')</script>";

        $stmt1 = $con->prepare("UPDATE forex_rates_new SET column_name=? WHERE column_name=?");
                        if($stmt1)
                        {
                            $stmt1->bind_param('is', $value, $value);
                            $stmt1->execute();
                        }
                      if($stmt1->affected_rows >0)
                      {
                        echo "<script language='javascript'>alert('Updated Sucessfully!!!')</script>";
                      }
                    else
                    {
                        echo "<script language='javascript'>alert('error!!!')</script>";
                    } 
        }

        $stmt = $con->prepare("INSERT into forex_rates_new VALUES(?,?,?,?, now())
        if($stmt)
        {
            $stmt->bind_param('isis', $currency_name, $agency_id, $rate, $logo);
            $stmt->execute();
        }
        if($stmt->affected_rows >0)
        {
            echo "<script language='javascript'>alert('Inserted Successfully!!!')</script>";
        }
        else{
            echo "<script language='javascript'>alert('An error occurred!!!')</script>";
        }
        } 
        ?>

您可以将
唯一键
添加到
机构id
货币名称
,然后使用“替换”语法->


无需为Update/Insert语句选择和添加条件。

但在本例中,如何比较代理id是否相同和货币名称是否相同?首先使用select查询检查给定
代理id
货币名称是否存在值。如果返回的行数大于
0
,则使用上述查询更新else insert。为什么要手动插入ID?最好的做法是让数据库自动分配ID。如果
机构\u id
货币\u name
不相同,但id已经存在,该怎么办?您将运行
INSERT
?我建议您的ID自动递增,并仅按ID进行检查。如果ID存在,则更新else insert。不会自动插入任何ID。ID是主键。我想有点混乱。脚本不必比较agency\u id=currency\u name,但如果agency\u id=$agency\u id(传递值)和currency\u name=$currency\u name(传递值),则必须进行比较。如果出现值为111的机构id和美元的货币名称,则在数据库中。下次如果用户输入与USD相同的值111和货币名称,则记录应处于更新模式或插入。请修改我的答案并检查它是否满足您的要求。感谢@Wong占用您的时间。我想这取决于您是否要先执行读取操作,然后执行写入操作。如果不考虑性能,这可能是一个很好的答案:两个标准包括
机构id
货币名称