【问题标题】:Insertion issue - MySQL via PHP插入问题 - MySQL 通过 PHP
【发布时间】:2013-02-22 11:06:12
【问题描述】:

我有一个结构如下的表

     Bay | Slot1 | Slot 2 | Slot 3 | Slot 4 | Slot 5 
     -----------------------------------------------
      1  | time1 | time 2 | time 3 | time 4 | time 5

以下代码用于插入:

for ($i =1; $i <= $bayCount; $i++) {
    mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)");

    for ($j=0; $j<$slotCount ; $j++) {  
       echo $i;
       echo $_slotColumns[$j];
       mysql_query("INSERT INTO $tableName ($_slotColumns[$j]) VALUES (slotValues[$j]) WHERE Bay = $i ");
    }

  }

bay 是一个增量类型的整数,并且槽的值作为数组传递 (slotValues[$j]) 槽列是使用 for 循环插入生成的。插槽值是文本类型。有人可以告诉我发生了什么吗?插入托架值但不插入槽值。我做错什么了吗?

【问题讨论】:

  • 您应该查看 SQL 语法的基础知识。 INSERT 向数据库添加了一个新行并且没有 WHERE。你需要的是UPDATE。尽管一次创建整个查询会更好。最好的办法是手动写出完整的查询,然后检查需要更改的部分。也不推荐使用mysql_query。查看mysqliPDO
  • 在其中一个循环中slotColumnsslotValues 的值是什么?
  • @Steve 我将数字 5 作为插槽计数传递给迭代以获取插槽列,插槽值是 time1 time 2 ...

标签: php sql insertion


【解决方案1】:

当您在 "" 中使用数组变量时,请尝试将它们放入 {}。 {$_slotcolumns[$j]}

【讨论】:

    【解决方案2】:

    我猜你应该在第二个循环中更新评估者而不是插入。 GL!

    【讨论】:

      【解决方案3】:

      您可能对引号有疑问:

      mysql_query("INSERT INTO $tableName (".$_slotColumns[$j].") VALUES ('".slotValues[$j]."') WHERE Bay = $i ");
      

      或者你也可以这样做:

      mysql_query("INSERT INTO $tableName ({$_slotColumns[$j]}) VALUES ('{slotValues[$j]}') WHERE Bay = $i ");
      

      您必须注意,普通查询需要这样的引号:

      mysql_query("INSERT INTO $tableName (columnName) VALUES ('value') WHERE Bay = $i ");
      

      【讨论】:

        【解决方案4】:

        删除第二个 INSERT 语句中的 WHERE Bay = $i ,这将始终为 false,因为它不存在。在这种情况下,您不能在 INSERT 查询中使用 WHERE,因为它总是返回 false。

        您还忘记在 slotValues 前面放一个 $ 符号。 在字符串中使用数组时,应始终将 {} 放在它们周围。 (例如 {$_slotColumns[$j]}

        for ($i =1; $i <= $bayCount; $i++) {
        mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)");
        
        for ($j=0; $j<$slotCount ; $j++) {  
        echo $i;
        echo $_slotColumns[$j];
        mysql_query("INSERT INTO $tableName ({$_slotColumns[$j]}) VALUES ({$slotValues[$j]})");
        }
        }
        

        或者,如果您想更新插入托架的字段而不是为每列添加新记录,您可以使用如下更新查询:

        for ($i =1; $i <= $bayCount; $i++) {
            mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)");
        
            for ($j=0; $j<$slotCount ; $j++) {  
            echo $i;
            echo $_slotColumns[$j];
            mysql_query("UPDATE $tableName SET {$_slotColumns[$j]} = {$slotValues[$j]} WHERE Bay = $i;");
            }
        }
        

        【讨论】:

        • mysql_query("UPDATE $tableName SET $_slotColumns[$j] = '$slotValues[$j]' WHERE Bay = '$i'");这行得通!更新而不是插入!非常感谢大家的帮助
        【解决方案5】:

        你有两个 separate 插入,所以你得到两个 separate 行,第一行将只包含 Bay。

        在我看来你想要一个查询:

        $query = "INSERT INTO $tableName (Bay, " . implode(',', $_slotColumns) . ") ";
        $query .= "VALUES(" . implode(',', $slotValues). ")";
        mysql_query($query);
        

        我不知道你想用WHERE 做什么;这对INSERT 毫无意义。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-09
          • 2014-06-25
          • 2015-08-30
          • 1970-01-01
          相关资源
          最近更新 更多