插入MySQL

时间:2019-01-03 16:56:09

标签: php jquery mysql sql ajax

我正在尝试插入数据库中的表。我正在用ajax完成。

这是我的代码:

$(document).on('click','.add', function(){
    var id = $(this).attr("id");
    var DT = $('#DT'+id).val(); 
    var SV = $('.search_text').val(); // store input value
    var action = "add";


    $.ajax({

        url:"action.php",
        method:"POST",
        data:{DT:DT, SV:SV,action:action,id:id},
        success: function(data){

            alert("success");               

        },
        error: function(){

        alert("error action");

        }

    });

});

数据将指向action.php。这是action.php的代码:

if (isset($_POST['action'])) {

        if($_POST["action"] == "add") {


            $insert_dtb = mysqli_query($con, "INSERT INTO table_dtb(SV, DT, DK, NH, ttDK, ngTT) 
            value($_POST[SV],$_POST[DT],now(),$_POST[SV],'1',now());"); 


        }
}

但是当插入表时,我在SV变量中的输入值变成了数字。

示例:如果我输入0153222,则在表table_dtb的SV列中它仅为153222,并且我无法在SV列中输入字符。

尽管我在table_dtb中将SV列设置为varchar(9),但它没有按预期工作。

1 个答案:

答案 0 :(得分:-1)

您传递两次$_POST[SV]的值,大概是您想要的NH值。不仅如此,您不仅会使用准备好的语句来捕捉到这一点,而且还只是使用当前代码进行SQL注入设置。

看看这个例子:

<?php
try {
  /* setup your database configuration */
  $config =  array(
    "host" => "127.0.0.1",
    "username" => "root",
    "password" => "",
    "name" => "db_name"
  );
  $dsn = "mysql:dbname=$config[name];host=$config[host];charset=utf8mb4";
  $db = new PDO($dsn, $config["username"], $config["password"]);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

  /* prepare the SQL statement */
  $stmt = $db->prepare("
    INSERT INTO `table_dtb` (
      `SV`, `DT`, `DK`, `NH`, `ttDK`, `ngTT`
    ) VALUES (
      :sv, :dt, NOW(), :nh, '1', NOW()
    );
  ");

  /* execute the statement passing the parameterized values */
  $stmt->execute(array(
    ":sv" => $_POST["SV"],
    ":dt" => $_POST["DT"],
    ":nh" => $_POST["NH"]
  ));
} catch(PDOException $ex) {
  /* pdo exception */
} catch (Exception $e) {
  /* php exception */
}
?>

要解释代码的作用,可以将其分为4个不同的部分。第一部分是Try / Catch异常处理程序。每当您有一段能够失败的代码时,都应将其包装在Try / Catch处理程序中,这是说“我将尝试执行此代码,但如果失败,则我要照顾随之而来的错误。”之所以有两个单独的catch块,是因为您有一个要处理数据库错误,而另一个要处理正常的PHP错误。如果您只想告诉用户发生了错误,请使用echo语句。但是,如果您正在调试并且错误消息是相关的,则可以通过调用getMessage函数来获取执行消息。

第二部分是数据库配置。从PHP 5开始, P HP D ata O 对象用于处理数据库操作。我亲自设置配置阵列的原因是因为对我而言,它并不是很完全必要,但是它更易于调试和读取。重要的是要创建一个新的PDO对象。

第三部分正在使用参数化的值准备SQL语句。由于SQL语句中的空格被忽略,PHP允许在String文字中继续行,因此您可以通过对SQL语句的不同段使用单独的行来格式化SQL语句,以提高可读性。前面带有:前缀的值的基本思想是,它们表示一个不直接存储在SQL字符串中的值。

第四部分正在执行参数化查询。单独调用execute函数将运行SQL语句,但是由于您已在SQL查询中传递了参数,因此还需要传递要发送的值。在这种情况下,我们为参数命名,因此在关联数组中,我们将参数的名称指定为键,然后将要传递的值指定为值。

希望这可以为您清除代码,如果您有任何疑问,请随时提问。