Утверждение PDO INSERT молча терпит неудачу - PullRequest
0 голосов
/ 12 июня 2018

В моей тестовой среде, которая является MAMP 4.5, оператор работает без проблем.Но когда я использую тот же оператор на моей тестовой виртуальной машине, INSERT завершается неудачно, без ошибок.

Я использую это для обнаружения любых ошибок:

try {
        // http://php.net/manual/en/pdo.connections.php
        $dbConn = new PDO("mysql:host={$databaseHost};dbname={$databaseName}", $databaseUsername, $databasePassword);

        $dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Setting Error Mode as Exception
        // More on setAttribute: http://php.net/manual/en/pdo.setattribute.php
    } catch(PDOException $e) {
        echo $e->getMessage();
    }

И вот мой оператор INSERT:

<?php
    // Database connection file
    include_once("../config.php");

    if(isset($_POST['Submit'])) {
        $status=$_POST['status'];
        $system=$_POST['system'];
        $first_name=$_POST['first_name'];
        $last_name=$_POST['last_name'];
        $primary_num=$_POST['primary_num'];
        
        // Insert data into table
        $sql = "INSERT INTO table(
            status,
            system,
            first_name,
            last_name,
            primary_num
        ) VALUES(
            :status,
            :system,
            :first_name,
            :last_name,
            :primary_num
        )";

        $query = $dbConn->prepare($sql);
        
        $query->bindParam(':status', $status);
        $query->bindParam(':system', $system);
        $query->bindParam(':first_name', $first_name);
        $query->bindParam(':last_name', $last_name);
        $query->bindParam(':primary_num', $primary_num);

        $query->execute();

        // Redirect to the display page
        header("Location: index.php");

    }
?>

Исправление:

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

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Вы можете попытаться напечатать информацию о внутренней ошибке, если на самом деле не генерируются исключения:

// http://php.net/manual/en/pdostatement.errorinfo.php
$error = $query->errorInfo();

// see if anything is output here
print_r($error);

Вы также упомянули в комментарии, что ошибка перед звонок execute().Это может быть потому, что вы используете все строчные имена для bindparam().

http://php.net/manual/en/pdostatement.bindparam.php

Попробуйте изменить привязку вашего параметра к этому:

$query->bindParam(':status', $status);
$query->bindParam(':system', $system);
$query->bindParam(':first_name', $first_name);
$query->bindParam(':last_name', $last_name);
$query->bindParam(':primary_num', $primary_num);

Или еще лучше;удалите приведенные выше строки и задайте их в вызове execute():

$query->execute([
    'status'      => $status,
    'first_name'  => $first_name,
    'last_name'   => $last_name,
    'primary_num' => $primary_num,
]);

Если приведенная выше информация не помогает, можете ли вы убедиться, что включена функция отчетов об ошибках?Взятый из инструкции на этот ответ , вы можете сделать это так:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
0 голосов
/ 12 июня 2018

Удалить: в bindParam

$ query-> bindParam ('status', $ status);$ query-> bindParam ('system', $ system);$ query-> bindParam ('first_name', $ first_name);$ query-> bindParam ('last_name', $ last_name);$ query-> bindParam ('primary_num', $ primary_num);

0 голосов
/ 12 июня 2018

пытались ли вы использовать $ GLOBAL ['dbConn'] вместо $ dbConn.

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