Php 无覆盖的Sql注入

Php 无覆盖的Sql注入,php,sql,Php,Sql,我有一个php脚本,可以填充sql数据库中的表。问题是每次运行时它都会覆盖表,我只想在最后添加数据。我从一个我修改过的现有脚本中获得灵感,但我不理解它包含的所有内容 这是我的密码: <?php try { session_start(); require_once('./lib/demo/php/functions.php'); $db = getConnection(); $colMap = array( 0 => "LIBE

我有一个php脚本,可以填充sql数据库中的表。问题是每次运行时它都会覆盖表,我只想在最后添加数据。我从一个我修改过的现有脚本中获得灵感,但我不理解它包含的所有内容

这是我的密码:

<?php

  try {

    session_start();
    require_once('./lib/demo/php/functions.php');

    $db = getConnection();

    $colMap = array(
      0 => "LIBELLE",
      1 => "DESCRIPTION",
      2 => "CODE"
    );

    if (isset($_GET['data']) && $_GET['data']) {
      $select = $db -> prepare('DELETE FROM COMPETENCES');
      $select2 = $db -> prepare('DELETE FROM DESCRIPTION');

      $select -> execute();
      $select2 -> execute();

      for ($r = 0, $rlen = count($_GET['data']); $r < $rlen; $r++) {
        $rowId = $r + 1;
        for ($c = 0, $clen = count($_GET['data'][$r]); $c < $clen; $c++) {
          if (!isset($colMap[$c]) && !isset($colMap[$c])) {
            continue;
          }

          $newVal = $_GET['data'][$r][$c];

          $select = $db -> prepare('SELECT ID FROM COMPETENCES WHERE ID=? LIMIT 1');
          $select2 = $db -> prepare('SELECT ID FROM DESCRIPTION WHERE ID=? LIMIT 1');

          $select -> execute(array($rowId));
          $select2 -> execute(array($rowId));

          if ($row = $select->fetch() && $row = $select2->fetch()) {
            $query = $db->prepare('UPDATE COMPETENCES SET `' . $colMap[$c] . '` = :newVal WHERE ID = :id');
            $query2 = $db->prepare('UPDATE DESCRIPTION SET `' . $colMap[$c] . '` = :newVal2 WHERE ID = :id2');

          } else {
            $query = $db->prepare('INSERT INTO COMPETENCES (ID, `' . $colMap[$c] . '`) VALUES(:id, :newVal)');
            $query2 = $db->prepare('INSERT INTO DESCRIPTION (ID, `' . $colMap[$c] . '`) VALUES(:id2, :newVal2)');
          }

          $query->bindValue(':id', $rowId, PDO::PARAM_INT);
          $query2->bindValue(':id2', $rowId, PDO::PARAM_INT);

          $query->bindValue(':newVal', $newVal, PDO::PARAM_STR);
          $query2->bindValue(':newVal2', $newVal, PDO::PARAM_STR);

          $query->execute();
          $query2->execute();

        }
      }
    }

    $out = array(
      'result' => 'ok'
    );
    echo json_encode($out);

    closeConnection($db);
  }
  catch (PDOException $e) {
    print 'Exception : ' . $e->getMessage();
  }
?>
}

}
我认为删除
DELETE
查询可以解决问题,但脚本根本不起作用。我认为问题来自身份证,但我不知道在哪里

这些数据来自使用javascript插件
Handsontable
创建的网格


你能帮我吗?我真的需要这个脚本。

我的脚本仍然不起作用,但我删除了所有我发现无用的东西。现在,即使新代码看起来更合适,数据库中也不会发生任何事情

以下是新的:

<?php

  try {

   session_start();
   require_once('./lib/demo/php/functions.php');

   $db = getConnection();
   mysql_set_charset('utf8', $db);
   $colMap = array(
       0 => 'LIBELLE',
       1 => 'DESCRIPTION',
       2 => 'CODE'
   );
   if (isset($_GET['data']) && $_GET['data']) {


       for ($r = 0, $rlen = count($_GET['data']); $r < $rlen; $r++) {
           $rowId = $r + 1;

           for ($c = 0, $clen = count($_GET['data'][$r]); $c < $clen; $c++){
               if (!isset($colMap[$c])) {
                   continue;
               }

               $newVal = $_GET['data'][$r][$c];

               $query = $db->prepare('INSERT INTO COMPETENCES ("'.$colMap[$c].'") VALUES(:newVal)');
               $query2 = $db->prepare('INSERT INTO DESCRIPTION ("'.$colMap[$c].'") VALUES(:newVal2)');

               $query->bindValue(':newVal', $newVal, PDO::PARAM_STR);
               $query2->bindValue(':newVal2', $newVal, PDO::PARAM_STR);

               $query->execute();
               $query2->execute();

           }

       }

   }

   $out = array('result' => 'ok');
   echo json_encode($out);

   closeConnection($db);
}
catch (PDOException $e) {
    print 'Exception : ' . $e->getMessage();
}

?>

删除你认为这意味着什么我不明白你想告诉我什么,这有什么意义?删除2
删除
查询,不要忘记下面的2
->execute()
行。谢谢你的回答,但我之前已经尝试过了,脚本根本不起作用。发生了什么?你有什么错误?每次运行此操作时,这两个查询都会删除这些表中的所有数据。