【问题标题】:Syntax issue UPDATE works but not INSERT语法问题 UPDATE 有效,但 INSERT 无效
【发布时间】:2013-08-08 14:28:56
【问题描述】:

我有一个选择默认值的下拉列表。如果那里有值,则 if 语句允许更新数据。如果没有值,则将插入一整行。如果我将第三个值硬编码为 1,它将起作用。但是,当我将其设置为 $category_of_taxom1 时,插入不起作用。更新工作正常,所以如果我在数据库中手动创建记录,我可以通过下面显示的更新 SQL 更新它。但是,如果我尝试 INSERT 没有运气? (我已经硬编码了前3个要插入的项目,第三个应该是上面提到的变量。

我有这个选择列表

      <select name="categorySelect1fromDB" >
<option value ="">EMPTY</option>';
      <option value="1" <?php echo ($category_of_taxom1 == 1)?"selected":""; ?>>A</option>
      <option value="2" <?php echo ($category_of_taxom1 == 2)?"selected":""; ?>>B</option>
      <option value="3" <?php echo ($category_of_taxom1 == 3)?"selected":""; ?>>C</option>
      <option value="4" <?php echo ($category_of_taxom1 == 4)?"selected":""; ?>>D</option>
</select> 

还有这组语句。

  if(isset($_POST['save']))
 {  
                  $category_of_taxom1 = $_POST['categorySelect1fromDB'];
                  $number_of_taxom1 = $_POST['number_of_taxom1'];

 if (!empty($category_of_taxom1)){ //This is the value fromDB if not empy then do below else do last

            pg_query("UPDATE record_tbl SET category_of_taxom ='$category_of_taxom1', number_of_taxom ='$number_of_taxom1' WHERE sheet_id = '$sheet_id' AND line = 1");
            echo "Updated!";

    } else 
            {

            pg_query("INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (1,1,'$category_of_taxom1','$number_of_taxom1','$sheet_id')");

            echo "New Record ?Saved!";
}
}   

这是我在网站的其他地方使用的工作 pgsql 行的示例:

  $sql8 = "INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (8,8,'$_POST[gammarus_numbers]','$_POST[countgammarus]','$sheetid')";
  $result = pg_query($sql8);

【问题讨论】:

  • 一旦我有一个示例工作,我将把它切换到 PDO 参数。
  • $number_of_taxom1 一样将值放在单引号中
  • 您使用的是什么数据库? pg_query() 是否意味着 PostgreSQL?更新:我利用了谷歌的全能。所以我的问题现在变成了列名是否应该有单引号?
  • 是的,对不起,我应该这么说。我已经编辑了这个问题,以便在我网站的其他地方显示此代码的工作示例。
  • 如果我对 sheet_id 进行硬编码,它现在正在工作。所以这只是我弄清楚我认为的“”的问题。

标签: php sql insert sql-update sql-insert


【解决方案1】:

字段 'category_of_taxom' 的数据类型很可能设置为 varchar,这意味着在使用 INSERT 时它应该在值周围加上引号。所以你可以:

1) 在您的数据库中将 category_of_taxom 的数据类型更改为整数

2) 在 INSERT 语句中包含值的引号:

('1','1','1','$number_of_taxom1',$sheet_id)

相关文档: mysql - quote numbers or not?

【讨论】:

  • 设置为smallint?
  • 运气不好,无论我是否使用引号。我更新了问题。仅当第三个值是硬编码时,插入才有效。如果我在所有内容和硬代码周围加上引号,它可以工作,但如果我用变量替换硬编码值,它就不起作用
  • 尝试使用这些引号:` 在 INSERT 中的字段名称周围
  • pg_query("INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (1,1,1,'$number_of_taxom1',$sheet_id)"); 如果我使用此代码,尽管值是硬编码的,但它可以工作,但是如果我在单击提交时触摸下拉列表,它会跳过整个 if 语句。即使 if 甚至没有提到它
  • 您是否尝试将表名括在这些引号中:` `
【解决方案2】:

我可能应该删除这个问题:引号是正确的,我在每个变量上都需要它们。但是由于代码太长,我无法将其全部发布在这里。我不小心调用了该变量两次。所以在某个时间点它确实有一些东西,但在同一个代码中它也可能没有。所以我最终不得不重命名我的变量。不是一个很好的答案,但无论如何都要删除它。因为这对其他人来说太窄了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多