我正在使用一个名为 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_
扩展,因为它已被弃用,请切换到 mysqli
或 pdo
。
关于php - 更新与输入 SQL 表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182004/