почему мой оператор php pdo вставляется дважды в БД - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть приложение для Android, которое пытается вставить информацию в базу данных. У меня был php REST API, работающий без проблем с PDO. Я решил попробовать перейти к заявлениям, подготовленным PDO, и у меня начались некоторые проблемы. Я использую mysql_query для вставки информации в базу данных, прежде чем я переключился на PDO. У меня есть ощущение, что это будет очень маленькое и простое решение. пожалуйста, не рви меня слишком сильно.

что я прочитал

PDO Вставка дважды

Ошибка оператора PHP PDO

Перезапись URL с использованием .htaccess

что я сделал для отладки

1) я выполнил каждое утверждение только один раз.

2) У меня нет правил перезаписи в моих файлах .htaccess:

# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working
RewriteBase /

^^ это все, что есть в моем файле htaccess

3) из двух ($ stmt и $ sportStmt) я удалил второе ($ sportStmt) и первоначальный оператор вставки вставлялся только один раз, по желанию.

4) Я проверил на стороне моего приложения, чтобы увидеть, делал ли я запрос на публикацию дважды, но это не так. (также очевидно, когда я удалил второй оператор вставки)

5) на случай, если вам интересно, что это за табличные отношения (pmk, fmk, triggers) .. скрипт отлично работал до того, как я решил переключиться на подготовленные операторы PDO.

это мой код:

    <?PHP
include_once("connection2.php");

//prepare statement
    if (isset($_POST['sports'])){

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    switch ($_POST['sports']){
        case hockey:
        $stmt = $conn->prepare("INSERT INTO hockey (name, age, league) 
                                VALUES (:name, :age, :league)");
        break;
        case soccer:
        $stmt = $conn->prepare("INSERT INTO soccer (name, age, league) 
                                VALUES (:name, :age, :league)");
        break;
        case basketball:
        $stmt = $conn->prepare("INSERT INTO basketball (name, age, league) 
                                VALUES (:name, :age, :league)");
        break;
        }

    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':age', $age);
    $stmt->bindParam(':league', $league);


    //insert Sport
    $playerSports = $_POST['sports'];
    $playerSports = trim($playerSports, '[]');
    $sports = explode(',', $playerSports);

    foreach ($sports as $value){
        $value = trim($value, ' ');
        switch($value){
            case hockey:
                $value = "hockey";
                break;
            case soccer;
                $value = "soccer";
                break;
            case basketball;
                $value = "basketball";
                break;
        }

        $sportStmt = $conn->prepare("INSERT INTO playerSports (name, sports) VALUES (:name, :sports)
                                    ON DUPLICATE KEY UPDATE name = VALUES(name), sports = VALUES(sports);");
        $sportStmt->bindParam(':sports', $value);
        $sportStmt->bindParam(':name', $name);
        $name = $_POST['name'];
        $sportStmt->execute();
    }


    echo "New records created successfully";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }

    } else {
        echo "did not receive category";
    }



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