Arhn - архитектура программирования

Каждый раз, когда я пытаюсь отправить данные в базу данных MySQL с помощью Swift и Alamofire, данные отображаются нулевыми?

func uploadPostData() {

    let parameters: [String: Any] =
        ["title": "\(titleName!)", // string
        "link": "\(link!)", // string
        "available_shares": sharesNum!, // int
        "risk": riskLevel!, // int
        "description": descriptionView.text!, // string
        "postID": postID, // string
        "price": 0.99,
        "timestamp": 700
        ]
    print(parameters)

    Alamofire.request("example.com", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil)
        .responseJSON() { response in
            switch response.result {



    }
}

Выше мой метод Swift, который вызывает PHP-скрипт, который я прикреплю ниже. Я считаю, что проблема заключается в моем PHP, так как запрос POST определенно был получен. Моя база данных действительно обновляется при вызове метода, но данные во всех столбцах имеют значение null/значение по умолчанию. Я попытался распечатать словарь параметров, но он выглядит полностью, как и ожидалось, без нулевых значений.

    <?php

    $item1 = $_POST['title'];
    $item2 = $_POST['link'];
    $item3 = $_POST['available_shares'];
    $item4 = $_POST['risk'];
    $item5 = $_POST['description'];
    $item6 = $_POST['postID'];
    $item7 = $_POST['price'];
    $item8 = $_POST['timestamp'];

// Create connection
    $mysqli=mysqli_connect("localhost","username","password","database"); 

// Check connection
    if (mysqli_connect_errno())
    {
      echo "
Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $query = "INSERT INTO `TB_POSTS` (postID, timestamp, link, price, title, available_shares, risk, description) VALUES ('".$item6."','.$item8.','".$item2."','".$item7."','".$item1."','".$item3."','".$item4."','".$item5.")";

    $result = mysqli_query($mysqli,$query);

    echo $result; // sends 1 if insert worked
?>

Нижняя строка, которая выводит 1, если вставка сработала, на удивление работает. Но опять же, проблема заключается в том, что обновленные данные никогда не появляются в базе данных. Я знаю, что он обновляется, потому что в таблице есть еще одна строка, но фактических значений никогда нет. Я также получил ошибку Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength, когда использовал .responseJSON, но когда я изменил его на .responseString, я получил вывод «УСПЕХ». Большое спасибо всем, кто может помочь.


  • Сначала попробуйте пару простых способов отладки: 1) var_dump($_POST); после $item8 = $_POST['отметка времени']; 2) эхо-запрос; после $query = INSERT INTO TB_POSTS 3) вставьте функции ошибок mysqli для захвата и вставки ошибок /db. Тогда вернитесь к нам с результатами. 07.06.2018
  • Error Domain=NSCocoaErrorDomain Code=3840 Недопустимое значение около символа 0. UserInfo={NSDebugDescription=Недопустимое значение около символа 0.}))). Это результат добавления echo $query, я попробую распечатать var_dump и сообщу о результатах. 07.06.2018

Ответы:


1

Вы должны использовать параметризованные запросы, чтобы предотвратить внедрение sql. Вот ссылка, которую вы должны прочитать, а затем добавить в закладки, чтобы иметь ее для быстрого ознакомления.

https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection

Я обновил ваш код, используя параметризованные запросы в качестве модели для изучения.

$item1 = $_POST['title'];
$item2 = $_POST['link'];
$item3 = $_POST['available_shares'];
$item4 = $_POST['risk'];
$item5 = $_POST['description'];
$item6 = $_POST['postID'];
$item7 = $_POST['price'];
$item8 = $_POST['timestamp'];

// Create connection
$mysqli=mysqli_connect("localhost","username","password","database"); 

// Check connection
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$query = "INSERT INTO `TB_POSTS` 

(
  postID, 
  timestamp, 
  link, 
  price, 
  title, 
  available_shares, 
  risk, 
  description 

) VALUES(?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = $mysqli->prepare($query);  //Prepare
$stmt->bind_param("ssssssss", $item6, $item8, $item2, $item7, $item1, $item3, $item4, $item5);  //Bind
$stmt->execute();//Execute
if($stmt->affected_rows === 0) exit('Nothing was inserted.');  //Check to see if it worked
$stmt->close();
07.06.2018
  • Большое спасибо, чувак, я боролся с этим несколько дней, и это исправило это. Все параметры читались как строки, хотя моя схема требовала нескольких столбцов с двойными значениями, целыми числами и т. д. Также спасибо за ссылку на ресурс. 07.06.2018
  • Привет, рад, что это сработало для тебя. Удачи с проектом. Ваше здоровье! 07.06.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..