Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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
Php 更新与输入SQL表的问题_Php_Mysql - Fatal编程技术网

Php 更新与输入SQL表的问题

Php 更新与输入SQL表的问题,php,mysql,Php,Mysql,我正在使用一个叫做覆盆子品脱(Raspberry Pints)的免费分发软件包来测量啤酒通过桶龙头的流量。我想更新一些功能,到目前为止做得相当好。下面的问题就是目前让我头疼的所有问题 工作原理: 我输入了一杯啤酒,其中包含了啤酒的一些细节(名称、颜色、酒精、ibu等),它应该通过php更新sql表。如果是,请使用包中发布的.php脚本和html表单,一切正常 我做了一些更改以添加新的特征,这需要更新大量文件并向sql表中添加新列。我已经测试了新旧格式文件的每个组合,并将问题缩小到下面的代码。目前

我正在使用一个叫做覆盆子品脱(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()之前的最后一行不包含逗号。


我不确定您编辑了多少代码,或者这些代码与平台的其他部分如何交互,但在您的情况下,我认为可能值得查看“插入…重复密钥更新语法”,该语法记录在此处:

除了检查id,您只需运行一个命令,即

$sql=“插入啤酒中('name'、'beerStyleId'、'notes'、'ogEst'、'fgEst'、'srmEst'、'ibest'、'water'、'salts'、'finings'、'yeast'、'createdDate'、'modifiedDate')”。
“值(”。
“.”。编码($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()。””。
“““$啤酒->获取酵母()””。
“,NOW(),NOW())”。
“在重复密钥更新时”。
“name=”。编码($beer->get_name())。“,”。
“beerStyleId=”。编码($beer->get_beerStyleId())。“,”。
“notes=”.encode($beer->get_notes())。“,”。
“ogEst=”“$beer->get_og()”,”。
“fgEst=”“$beer->get_fg()。”,”。
“srmEst=”$beer->get_srm()。“,”。
“ibuEst=”$beer->get_ibu()。“,”。
“水=”,“$啤酒->获取水()。
“salts=”“$beer->get_salts()”,”。
“finings=”“$beer->get_finings()。”,”。
“酵母='”$beer->get_酵母()。“,”。

“modifiedDate=NOW()”;

我的第一个猜测是,
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\ucode>扩展,因为它已被弃用,请切换到
mysqli
pdo

是的,id字段是主字段,并且是自动递增的。我关心的是添加id的原始/默认值没有将其作为列包含在内。如果您可以编辑您的问题并删除未恢复的字段,那就太好了vant代码。
beerStyleId
是一个文本字段,但不幸的是添加引号并不能改变我的问题。@mredhwk10-您启用错误报告了吗?您还可以使用
print mysql_error();
打印最后一个mysql错误,以获取有关出错原因的信息。只需放置
print mysql_error()
调用
mysql\u query()后
。我启用了报告功能。因为我通过一个管理html界面运行它,页面宽度为800px,它被返回到我的一个文本输入框中……下面是它所说的内容。
注意:未定义的属性:Beer:$\u酵母在/var/www/RPints/admin/includes/models/Beer.php第57行
中。该文件定义了所有变量。它们被引用带有
require\u once
@mredhwk10的此文件-错误说明未定义
$\u yeast
,这是为什么。未使用
$beer->get\u yeast()的原始查询
works?现在检查当我将酵母作为一个选项移除时会发生什么。此代码中缺少一些内容。使用我拥有的另一个文件(beer_list.php)显示我现有的啤酒是不可能的好吧,也许我理解错了你的问题。如果代码中的插入查询似乎从未运行过,例如,你可以尝试取消注释
echo$sql;exit();
并查看输出,如果查询始终是
UPDATE
查询,那么你可能需要检查
$beer->get\u id()的值
对于
if($beer->get_id())
语句,
它可能会返回一些总是等同于
TRUE
的内容…gyeo--我尝试了您的建议,得到了insert命令的输出,如图所示
insert INTO beers('name','beerStyleId','notes','ogEst','fgEst','srmEst','ibuEst','createdDate','modifiedDate')值('sengerative Summer',57','1.055','1.012','6.1','34',NOW(),NOW())
如果尝试在
中添加我的编码,请插入啤酒('name'、'beerStyleId'、'notes'、'ogEst'、'fgEst'、'srmEst'、'ibest'、'water'、'salts'、'finings'、'yeast'、'create
ini_set('display_errors', true);
error_reporting(E_ALL);