PDO INSERT语句默默地失败

时间:2018-06-12 12:49:03

标签: php pdo

在我的测试环境中,即MAMP 4.5,该语句完美无缺。但是当我在我的测试VM上使用相同的语句时,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 :(得分:0)

如果实际上没有抛出异常,您可以尝试打印内部错误信息:

// 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,
]);

如果上述信息无效,您是否可以确保启用了错误报告?根据{{​​3}}上的说明,您可以这样做:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

答案 1 :(得分:0)

删除:在bindParam中

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

答案 2 :(得分:-1)

您是否尝试使用$ GLOBAL ['dbConn']而不是$ dbConn。