gpt4 book ai didi

php - 配置相同,但有一个带来 : Error SQLSTATE[23000] column cannot be null

转载 作者:行者123 更新时间:2023-11-29 11:31:32 25 4
gpt4 key购买 nike

我知道已经有大量关于此错误的帖子,并且我确实知道它是如何以及为何发生的。我的问题是,我使用相同的配置,并且运行几乎相同的代码,但在发送表单后,只有一页出现错误。数据库中相应的列具有完全相同的配置:Null 已关闭(因此实际上两者都必须响应错误)并且类型为 varchar,均采用自动增量。我不知道,在这里发布代码片段是否真的有帮助,我只是希望有人知道/已经发生过类似的错误。

现在这是插入命令和表单的第一个代码,发送后没有错误。我有一个用于选择主题2的下拉按钮,也可以保持不变(我缩短了表格):

<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();

请注意,分配已移至使用前。

当提交的数据不符合您的预期时,您还应该进行适当的错误处理。

关于php - 配置相同,但有一个带来 : Error SQLSTATE[23000] column cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com