我一直从这个简单的mysql语句中得到以下错误,我无法理解为什么。我确定它显而易见。
require_once("connect.php");
$query = mysql_query("SELECT * FROM accounts ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_assoc($query);
$balanceold = $row['balance'];
$difference = $_POST['predec'].".".$_POST['dec'];
$category = $_POST['category'];
$notes = $_POST['notes'];
if(isset($_POST['in'])){
$balancenew = $balanceold + $difference;
$query = mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes) VALUES (".$balancenew.", ".$difference.", ".$category.", ".$notes.")");
if($query){
header("Location: budget.php");
}
else{
die(mysql_error());
}
}
给出错误: “字段列表”中未知列“发薪日”
这是我的表单代码:
<form action=process.php method=post>
£
<input type=text name=predec size=7>
.
<input type=text name=dec size=4 value=00>
<br />
<select name=category>
<option value=payday>Payday</option>
</select>
<input type=text name=notes size=20>
<input type=submit name=in value=Deposit>
<input type=submit name=out value=Withdraw>
</form>
数据库表“accounts”包含以下字段:
id,int primary A_I
balancein,十进制10,2
balanceout,十进制10,2
当前余额,十进制10,2
类别,varchar 50
notes,varchar 255
日期,时间戳
......按顺序
答案 0 :(得分:14)
试试这个(用单一配额将每个变量括在查询中):
mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes)
VALUES ('$balancenew', '$difference', '$category', '$notes')");
最好使用mysqli或PDO来防止SQL注入攻击,你现在可以使用mysql_real_escape_string():
$balancenew = mysql_real_escape_string($balancenew);
以及其他变量。
答案 1 :(得分:1)
这是因为您的INSERT查询中存在语法错误。字符串和日期值将传递到sql中的单引号而不是双引号。 。或字符串连接字符也不是必需的。因此,根据您提供的数据,它可能是
$query = mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes)
VALUES ($balancenew, $difference, '$category', '$notes')");
答案 2 :(得分:0)
基本上,sql告诉您正在引用插入中未在数据库中定义的列。提供表结构或确保列名与db中定义的完全相同。 HTH。
答案 3 :(得分:0)
我猜错了包含$ notes和$ category的单引号。将它们包含在'并且你的问题应该得到解决。