我使用PHP中的PDO将值插入到我的MariaDB中.但是,当我违反非空约束时,什么都不会发生.我希望在这种情况下抛出一个例外.
这就是我创建表格的方式:
CREATE TABLE person (
id INT auto_increment NOT NULL,
firstname varchar(255) NULL,
lastname varchar(255) NULL,
telephone varchar(255) NULL,
alias1 varchar(255) NOT NULL,
alias2 varchar(255) NULL,
CONSTRAINT PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
以下是我用于测试的PHP脚本:
<?php
$conn = new PDO(
'mysql:host=localhost;dbname=tibsi-data', 'root', '',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
try {
$stm = $conn->prepare("INSERT INTO person (firstname) VALUES (:firstname)");
$stm->bindValue(':firstname', 'Mike');
$success = $stm->execute();
if (!$success) {
throw new Exception($stm->errorInfo()[2]);
}
$stm->closeCursor();
$insertId = $conn->lastInsertId();
header('HTTP/1.1 200 OK');
header('Content-Type: application/json; charset=utf-8');
echo json_encode(array('id' => $insertId));
exit;
} catch (Exception $e) {
header('HTTP/1.1 500 Internal Server Error');
header('Content-Type: application/json; charset=utf-8');
echo json_encode(array('error' => $e->getMessage()));
exit;
} catch (Error $e) {
header('HTTP/1.1 500 Internal Server Error');
header('Content-Type: application/json; charset=utf-8');
echo json_encode(array('error' => $e->getMessage()));
exit;
}
如您所见,alias1
没有缺省值,我在INSERT语句中省略了它.当我try 使用SQL脚本执行相同的操作时,确实会出现错误.
我预计这会在PHP中抛出一个异常,导致500响应.相反,它使用表示alias1
的空字符串插入行.我从未将此设置为默认设置.
有什么属性可以设置来获得我想要的行为吗?