[英]PDO INSERT statement silently failing
在我的测试环境(即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,现在数据成功发布了!
您可以尝试打印内部错误信息,以防万一实际上没有引发异常:
// 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/zh/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);
删除:在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);
您是否尝试使用$ GLOBAL ['dbConn']而不是$ dbConn。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.