php - 基于 if/else 条件插入数据的半功能

标签 php mysql sql

我有一个名为“editedworkhours”的表,最初是空的。我根据 if/else 条件向其中插入 addedwh 和 idnumber。这样: 如果addedwh为空(然后插入)else(更新,因为已经有值了)。 现在更新部分运行良好(因为我在数据库的表中手动添加值以尝试更新)。但是,如果表中不存在 idnumber(即 id),则不会发生插入。关于可能阻止 if/else 条件准确运行的任何建议?

if(isset($_POST['submit']))
    {
        $addedhours = $_POST['AddedHours'];
        $selectid = $_POST['SelectID'];
$sql1="SELECT addedwh FROM editedworkhours WHERE idnumber='$row[0]'";
$getResult = mysql_query($sql1);
        $count = count($getResult);
        if(empty($count))
        {
            $sql="INSERT INTO editedworkhours (IDNumber,AddedWH) VALUES('$selectid','$addedhours')";
        }
else 
    {
            $tempname = $row['Field'];
            $sql2 = "UPDATE editedworkhours SET AddedWH = AddedWH +'$addedhours' WHERE IDNumber='$selectid'";
            $result2 = mysql_query($sql2);

            if (isset($result2))
            {

            }
            else
            {

                echo '<script>swal("Error", "Something went wrong error");</script>';
            }

        }


    }

    echo $menu;

最佳答案

我会删除条件并简单地执行 INSERT ... ON DUPLICATE KEY UPDATE ... 查询。这将允许您消除初始 SELECT 查询以确定记录是否存在。

INSERT INTO editedworkhours (IDNumber,AddedWH)
VALUES($selectid, $addedhours)
ON DUPLICATE KEY UPDATE AddedWH = AddedWH + $addedhours

这需要在 IDNumber 上有一个唯一(或主键)索引。

您可以在执行查询后检查 mysql_affected_rows() 值以确定是否发生了插入或更新。对于插入,返回值为 1。对于更新,返回值为 2。

请注意,我还删除了插入内容周围的字符串分隔符,因为我假设您在这两种情况下都有 INT 类型字段。

把它放在一起可能看起来像这样:

if(isset($_POST['submit'])) {
    // validate user input as integer value string
    $addedhours = filter_var($_POST['AddedHours'], FILTER_VALIDATE_INT);
    $selectid = filter_var($_POST['SelectID'], FILTER_VALIDATE_INT);

    if($addedhours === false || $selectid === false) {
        // input was bad
        // perhaps do some error messaging here
        die('Bad input');
    }

    // both filters passed
    // prepare variables for insert/update
    $addedhours = mysql_real_escape_string($addedhours);
    $selectid = mysql_real_escape_string($selectid);

    // form query
    $sql = "INSERT INTO editedworkhours (IDNumber,AddedWH)
    VALUES($selectid, $addedhours)
    ON DUPLICATE KEY UPDATE AddedWH = AddedWH + $addedhours";

    // execute
    $result = mysql_query($sql);
    if(true === $result) {
        // the query worked
        // determine if insert or update was performed
        // maybe present have different logic based on insert vs. update
        if(mysql_affected_rows() === 1) {
            // an insert occurred
        } else {
            // an update occurred
        }
    } else {
        echo '<script>swal("Error", "Something went wrong error");</script>';
    }
}

您应该注意您在评论中获得的建议,并考虑将 MySQLi 或 PDO 与参数化准备语句结合使用。为了与您当前的使用保持一致,我确实展示了使用 mysql 的代码示例。

关于php - 基于 if/else 条件插入数据的半功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31787268/

相关文章:

php - 使用 php 将数据插入/更新到 MySql 数据库中

javascript - 使用jquery记住浏览器刷新时剩余时间

Mysql语句在表底部而不是最后一行被删除的位置插入行?

mysql - 在vb.net中同步两个mysql数据库

sql - SQL Server 中的月和年筛选器

sql - 图形数据库(如 Neo4j)什么时候不好用?

php - MySQL数据库和导入日期问题

PHP 为 mysql 交互创建函数还是每次都使用纯代码?

Mysql 从第二个表中计数

php - UNIX_TIMESTAMP 函数 MySQL