![](/img/trans.png)
[英]Error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comments' cannot be null
[英]Same configuration but one brings: Error SQLSTATE[23000] column cannot be null
我知道已經有很多關於此錯誤的帖子,而且我確實知道如何以及為什么發生。 我的問題是,我使用相同的配置,並且運行的代碼幾乎相同,但是在發送表單后,只有一頁會出現錯誤。 數據庫中的相應列具有完全相同的配置:Null關閉(因此實際上兩者都必須響應一個錯誤),並且類型均為varchar,兩者都自動遞增。 我不知道,如果這真的有助於將代碼片段發布到這里,我只是希望有人知道/已經出現了與此錯誤類似的情況。
現在,這里是插入命令和表單的第一個代碼,發送后不會出錯。 我有一個用於選擇subject2的下拉按鈕,也可以保持不變(我縮短了表格):
<form name="lfb" action="lfb.php#lfbjump" method="post">
<select name="subject2">
<option value="">choose another subject</option>
<?php foreach ($subjects->fetchAll() as $subject): ?>
<option value="<?php echo $subject['fach_id']; ?>"><?php echo $subject['subject']; ?></option>
<?php endforeach; ?>
</select>
</form>
相應的插入命令(已縮短):
$order = "
INSERT INTO $dbname.$tablename (
subject2)
VALUES (
:subject2)";
try {
$pdo = new PDO($dsn, $user, $pw);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$statement = $pdo->prepare($order);
$statement->bindParam(':subject2', $subject2);
$subject2 = $_POST['subject2'];
$statement->execute();
現在,另一個下拉列表是通過ajax加載的(這有區別嗎?),並且會帶來錯誤:
<select name="noteniveau1">
<option value="">please choose</option>
<option value="1">example 1</option>
<option value="2">example 2</option>
</select>
插入命令(在循環中-> $ nr從1到4):
$order = "
INSERT INTO $dbname.$tablename (
noteniveau)
VALUES (
:noteniveau)";
try {
$pdo = new PDO($dsn, $user, $pw);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$statement = $pdo->prepare($order);
$statement->bindParam(':noteniveau', $noteniveau);
$noteniveau = $_POST["noteniveau$nr"];
$statement->execute();
錯誤:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]:
Integrity constraint violation: 1048 Column 'noteniveau' cannot be null' in /var/www/xx/html/xx/xx.php:199
Stack trace: #0 /var/www/xx/html/xx/xx.php(199): PDOStatement->execute()
#1 /var/www/xx/html/xx/xx.php(438): include('/var/www/xx...') #2 {main} thrown in /var/www/xx/html/xx/xx.php on line 199
在兩個插入中,在分配變量之前都使用了變量。 僅僅因為您在第一個插入操作中沒有出現錯誤,並不意味着您實際上最終成功插入了。 你應該有:
$statement = $pdo->prepare($order);
$subject2 = $_POST['subject2'];
$statement->bindParam(':subject2', $subject2);
$statement->execute();
對於第二個插入:
$statement = $pdo->prepare($order);
$noteniveau = $_POST["noteniveau$nr"];
$statement->bindParam(':noteniveau', $noteniveau);
$statement->execute();
請注意,分配已移至使用前。
當提交的數據與預期的不符時,您還應該進行適當的錯誤處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.