【问题标题】:PHP PDO insert query error : Integrity constraint violationPHP PDO 插入查询错误:违反完整性约束
【发布时间】:2013-12-30 10:33:33
【问题描述】:

您好,我有一个这样的 PHP 脚本:

<?php 
require('includes/db-core.php');//My DB info
$dbh = mf_connect_db();//Creates a connection object
$newObjs = array();
for($i=0;$i<6;$i++){
    array_push($newObjs,"data".$i);
}
try {
    for($i=0; i<sizeof($newObjs); $i++){
$stmt2 = $dbh->prepare("INSERT INTO companies_table (data1, data2, data3, data4, data5, data6) VALUES (?, ?, ?, ?, ?, ?)");         
        $stmt2->bindParam(1, $newObjs[$i]);
        $stmt2->bindParam(2, $newObjs[$i]);
        $stmt2->bindParam(3, $newObjs[$i]);
        $stmt2->bindParam(4, $newObjs[$i]);
        $stmt2->bindParam(5, $newObjs[$i]);
        $stmt2->bindParam(6, $newObjs[$i]);
        $stmt2->execute();
    }
    echo "New Row successfully added";
}catch( Exception $e ){
    echo 'Query error : ', $e->getMessage();
}
?>

我收到以下错误:查询错误:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'data1' cannot be null,但数据插入正确,我不知道为什么会这样(错误 + 插入)。

我的表的所有字段都不为空。

没有人注意到我的这个错误:

try {
    for($i=0; i<sizeof($newObjs); $i++){

我忘记了 $ 符号,真的很抱歉,但这有助于学习一点:感谢所有提供答案的用户,但下次最好先检查帖子是否有错误。

谢谢

【问题讨论】:

  • var_dump $newObjs[$i] 告诉我们你有什么?
  • @AwladLiton,不需要,因为它显然可以从上面的循环中获得。它将是data1 , data2 .... data6
  • 是的,我检查过了,它是 data1 ....

标签: php mysql pdo insert


【解决方案1】:

已编辑:

从您的数据库中的错误看来,您似乎不能让 data1 列为空,并且在循环的某个点,同一列似乎具有空值。

【讨论】:

  • 但是为什么,要插入的数据数组没有空值,我检查了 var_dump 并且所有数组都有数据。
  • 您是否尝试过将语句放在循环之外? (外部=循环之前)
  • 数据被插入了,这让我很抓狂,但我之前收到过这个错误。
  • 您是否尝试过指定它是哪条数据?像这样:wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
  • 是的,$stmt2->bindParam(1, $newObjs[$i], PDO::PARAM_STR);同样的错误。
【解决方案2】:

如果你坚持使用 for than 在这个例子中应该是:

$stmt2 = $dbh->prepare("INSERT INTO companies_table (data1, data2, data3, data4, data5, data6) VALUES (?, ?, ?, ?, ?, ?)");  

    for($i=0; i<sizeof($newObjs); $i++){      
    $stmt2->bindParam(($i+1), $newObjs[$i]);

}
$stmt2->execute();

但在你的情况下,整体看起来是个坏主意

【讨论】:

  • 是不是和我做的不一样?
  • @OussamaLord 你所做的是将相同的东西 $newObjs[$i] 放在所有列中,这样你最终会得到六行,每行在所有列中都具有相同的值。如果您有不同类型的列,则转换将失败并且您将遇到错误(就像您所做的那样)
  • 我所有的字段都是 Varchar 类型的,我不认为这是个问题。
  • 我插入的数组有字符串数据类型:array(6) { '[0]=> string(5) "data0" [1]=> string(5) "data1" [2]=> string(5) "data2" [3]=> string(5) "data3" [4]=> string(5) "data4" [5]=> string(5) "data5" }'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2020-06-14
  • 2015-05-26
  • 2012-12-26
  • 1970-01-01
相关资源
最近更新 更多