php - 更新与输入 SQL 表的问题

标签 php mysql

我正在使用一个名为 Raspberry Pints 的免费分发包来测量通过桶龙头的啤酒流量。我想更新一些功能,到目前为止已经做得很好了。以下问题是目前让我摸不着头脑的问题。

它是如何工作的: 我输入了一种啤酒,其中包含啤酒的许多细节(名称、颜色、酒精、ibu 等),它应该通过 php 更新 sql 表。如果使用包中发布的 .php 脚本和 html 表单,一切正常。

我进行了更改以添加新的啤酒特性,这需要更新大量文件并向 SQL 表添加新列。我已经测试了新旧格式文件的每种组合,并将问题范围缩小到下面的代码。目前,如果我使用默认条目表单,我可以毫无问题地在我的扩展表中创建新的啤酒条目。只有用旧表单输入啤酒后,我才能使用新表单进行更新并将最终变量输入表中。因为我可以将最终变量输入表中,所以我知道下面的代码有问题。

任何人都可以找出我哪里出了问题吗?基本上,如果啤酒存在,则更新其 ID 号。如果没有,请创建一个新条目。无论到目前为止我已经尝试过什么,我都无法创建新条目。

BeerManager 类{

function Save($beer){
    $sql = "";
    if($beer->get_id()){
        $sql =  "UPDATE beers " .
                "SET " .
                    "name = '" . encode($beer->get_name()) . "', " .
                    "beerStyleId = '" . encode($beer->get_beerStyleId()) . "', " .
                    "notes = '" . encode($beer->get_notes()) . "', " .
                    "ogEst = '" . $beer->get_og() . "', " .
                    "fgEst = '" . $beer->get_fg() . "', " .
                    "srmEst = '" . $beer->get_srm() . "', " .
                    "ibuEst = '" . $beer->get_ibu() . "', " .
                    "water = '" . $beer->get_water() . "', " .
                    "salts = '" . $beer->get_salts() . "', " .
                    "finings = '" . $beer->get_finings() . "', " .
                    "yeast = '" . $beer->get_yeast() . "', " .
                    "modifiedDate = NOW() ".
                "WHERE id = " . $beer->get_id();

    }else{      
        $sql =  "INSERT INTO beers(`name`, `beerStyleId`, `notes`, `ogEst`, `fgEst`, `srmEst`, `ibuEst`, `water`, `salts`, `finings`, `yeast`, `createdDate`, `modifiedDate`) " .
                "VALUES(" . 
                "'" . encode($beer->get_name()) . "', " .
                $beer->get_beerStyleId() . ", " .
                "'" . encode($beer->get_notes()) . "', " .
                "'" . $beer->get_og() . "', " . 
                "'" . $beer->get_fg() . "', " . 
                "'" . $beer->get_srm() . "', " . 
                "'" . $beer->get_ibu() . "' " .
                "'" . $beer->get_water() . "' " .
                "'" . $beer->get_salts() . "' " .
                "'" . $beer->get_finings() . "' " .
                "'" . $beer->get_yeast() . "' " .
                ", NOW(), NOW())";
    }       
    mysql_query($sql);
}

---已编辑---

工作修复如下。我把所有的都删除了,然后一个键一个键地重写。经过比较,我发现我添加的所有新变量都缺少逗号。这是因为我只是复制了 get_ibu 行,该行不包含逗号作为 NOW()

function Save($beer){
    $sql = "";
    if($beer->get_id()){
        $sql =  "UPDATE beers " .
                "SET " .
                    "name = '" . encode($beer->get_name()) . "', " .
                    "beerStyleId = '" . encode($beer->get_beerStyleId()) . "', " .
                    "notes = '" . encode($beer->get_notes()) . "', " .
                    "ogEst = '" . $beer->get_og() . "', " .
                    "fgEst = '" . $beer->get_fg() . "', " .
                    "srmEst = '" . $beer->get_srm() . "', " .
                    "ibuEst = '" . $beer->get_ibu() . "', " .
                    "water = '" . $beer->get_water() . "', " .
                    "salts = '" . $beer->get_salts() . "', " .
                    "finings = '" . $beer->get_finings() . "', " .
                    "yeast = '" . $beer->get_yeast() . "', " .
                    "modifiedDate = NOW() ".
                "WHERE id = " . $beer->get_id();
    }else{
        $sql =  "INSERT INTO beers(name, beerStyleId, notes, ogEst, fgEst, srmEst, ibuEst, water, salts, finings, yeast, createdDate, modifiedDate ) " .
                "VALUES(" . 
                    "'". $beer->get_name() . "', " . 
                    $beer->get_beerStyleId() . ", " . 
                    "'". $beer->get_notes() . "', " . 
                    "'". $beer->get_og() . "', " . 
                    "'". $beer->get_fg() . "', " . 
                    "'". $beer->get_srm() . "', " . 
                    "'". $beer->get_ibu() . "', " . 
                    "'". $beer->get_water() . "', " . 
                    "'". $beer->get_salts() . "', " . 
                    "'". $beer->get_finings() . "', " .  
                    "'". $beer->get_yeast() . "', " . 
                    "NOW(), NOW())";
    }
    mysql_query($sql);
}

最佳答案

我的第一个猜测是,beerStyleId 列包含文本,并且您没有在插入查询中引用该值。尝试将您的代码更新为:

$sql =  "INSERT INTO beers(`name`, `beerStyleId`, `notes`, `ogEst`, `fgEst`, `srmEst`, `ibuEst`, `water`, `salts`, `finings`, `yeast`, `createdDate`, `modifiedDate`) " .
        "VALUES(" . 
        "'" . encode($beer->get_name()) . "', " .
        "'" . encode($beer->get_beerStyleId()) . "', " .
        "'" . encode($beer->get_notes()) . "', " .
        "'" . $beer->get_og() . "', " . 
        "'" . $beer->get_fg() . "', " . 
        "'" . $beer->get_srm() . "', " . 
        "'" . $beer->get_ibu() . "' " .
        "'" . $beer->get_water() . "' " .
        "'" . $beer->get_salts() . "' " .
        "'" . $beer->get_finings() . "' " .
        "'" . $beer->get_yeast() . "' " .
        ", NOW(), NOW())";

我还建议您通过将以下内容添加到脚本顶部来启用错误报告:

ini_set('display_errors', true);
error_reporting(E_ALL);

请注意,您不应使用旧的 mysql_ 扩展,因为它已被弃用,请切换到 mysqlipdo

关于php - 更新与输入 SQL 表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182004/

相关文章:

php - 仅在 WooCommerce 中的特定日期销售某些产品

php - 如何在elasticsearch+PHP中传递null过滤器

PHP,禁用自动输入[]到数组

php - 如何从 mysql 数据库检索图像并在 php 中回显它?

php mysql数据格式需要改显示结果不带变量

mysql - 从我的查询中过滤掉特定的电子邮件域

mysql - 如何在输入 $ ps -ef | 后停止 MySQL grep mysql 吗?

mysqldump 无法从发送到已添加的 GEOMETRY 字段的数据中获取几何对象 --hex-blob

mysql - 如何过滤两列之间的一组数字?

java - 将输入的密码与数据库中的 BCrypt 散列密码进行比较