MYSQL - INSERT错误,字段列表中的未知列

时间:2013-03-29 19:45:39

标签: php mysql sql-insert

我一直从这个简单的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>

&pound;
<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

日期,时间戳

......按顺序

4 个答案:

答案 0 :(得分:14)

试试这个(用单一配额将每个变量括在查询中):

mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes) 
          VALUES ('$balancenew', '$difference', '$category', '$notes')");  

最好使用mysqliPDO来防止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的单引号。将它们包含在'并且你的问题应该得到解决。