PHP中的数据库插入返回未定义的字符串,并注意未知列

时间:2010-12-15 15:16:30

标签: php sql mysql

我试图在数据库中插入一个名为Id_Obj的字段并且它是一个VarChar但是当我尝试发送它时,我收到一个错误:

  

未知栏' Id_Obj4'在'字段列表'

插入内容如下所示:

while($info=mysql_fetch_Array($data))
{
  print "name :".$info['Id']." ";
  $count=$info['Id'];
}

$t = "INSERT INTO Table_Faces(Id_Obj,Num_Sides)VALUES(";
$t = $t."IdObj$count".",".$_GET["ns"];
$t = $t.")";

mysql_query($t);

数据库中的字段是Id,Id_Obj,Num_Sides。

3 个答案:

答案 0 :(得分:2)

一些事情:

  1. 你真的想确保这一点 您的值为escaped
  2. 你错过了最后一次“)” 在查询中
  3. 你的琴弦需要被包裹 引用,否则它认为你是 使用表名
  4. 您的SQL可以是:

    $t ="INSERT INTO Table_Faces(Id_Obj,Num_Sides)VALUES('IdObj4','". $_GET["ns"]. "')";
    

    另外,作为一方,你知道快捷方式:

    $t = $t . " something added";$t .= " something added"

    相同

答案 1 :(得分:1)

您需要在SQL中用单引号包装字符串。

$ns = intval($_GET('ns')); // This should sanitize $ns enough for the db.
if ($ns > 0)
{
  $t="INSERT INTO Table_Faces(Id_Obj,Num_Sides)VALUES(";
  $t = $t."'IdObj4'".",".$ns . ")";
  mysql_query($t);
}

你也忘记了右括号。

我已经修改了你的代码,以更加简单的方式抵抗SQL注入。如果您打算将Id_Obj变为一个变量,则应考虑使用mysql_real_escape_string()来转义在SQL语句中使用的值。

答案 2 :(得分:0)

当您的插入查询如此小的情况下,为什么不在一行中使用所有内容?它可以帮助您避免许多小问题。我认为 @Mark 解决了您的问题。