Входные значения автоматически становятся числами при вставке в MySQL - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь вставить в свою таблицу в базе данных. Я делаю это с 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. Вот код действия. 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, то в столбце SV таблицы table_dtb будет только 153222, и я не смогу ввести символ в столбец SV.

Хотя я установил столбец SV в table_dtb varchar (9), он работает не так, как я ожидал.

1 Ответ

0 голосов
/ 03 января 2019

Вы передаете значение $_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.Однако, если вы выполняете отладку и сообщение об ошибке имеет отношение, вы можете получить сообщение execption, вызвав функцию getMessage.

Второй раздел - это конфигурация базы данных.Начиная с PHP 5, P HP D ata O bjects используются для обработки ваших операций с базой данных.Причина, по которой я лично настраиваю массив конфигурации, заключается в том, что для меня проще отлаживать и читать, хотя это не совсем необходимо.Важной частью является то, что вы создаете новый объект PDO.

Третий раздел готовит инструкцию SQL с использованием параметризованных значений.Поскольку пробелы игнорируются в операторах SQL, а PHP допускает продолжение строк в литералах String, вы можете отформатировать оператор SQL для лучшей читаемости, используя отдельные строки для разных сегментов оператора SQL.Основная идея значений, перед которыми стоит префикс :, заключается в том, что они представляют значение, не сохраненное непосредственно в строке SQL.

В четвертом разделе выполняется параметризованный запрос.Вызов функции execute сам по себе будет запускать оператор SQL, но поскольку вы передали параметры в запросе SQL, вам также необходимо передать значения, которые должны быть отправлены.В этом случае мы назвали параметры, поэтому в ассоциативном массиве мы указываем имя параметра в качестве ключа, а затем назначаем значение, которое будет передано в качестве значения.

Надеемся, что это прояснит код для вас иесли у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...