mysqli INSERT异常

时间:2011-03-03 10:42:21

标签: php insert mysqli row

我有下表:

ID: bigint autoinc
NAME: varchar(255)
DESCRIPTION: text
ENTRYDATE: date

我正在尝试在表格中插入一行。它执行时没有错误,但没有任何内容插入数据库。

try {
    $query = "INSERT INTO mytable (NAME, DESCRIPTION, ENTRYDATE) VALUES(?,?,?)";
    $stmt = $conn->prepare($query);
    $name= 'something';
    $desc = 'something';
    $curdate = "CURDATE()";
    $stmt->bind_param("sss", $name, $desc, $curdate);
    $stmt->execute();
    $stmt->close();
    $conn->close();
    //redirect to success page
}
catch(Exception $e) {
    print $e;
}

它运行正常并重定向到成功页面,但在表格中找不到任何内容。为什么不起作用?

4 个答案:

答案 0 :(得分:2)

您确定没有错误吗?例如,列名中似乎有拼写错误。

请注意,默认情况下,PDO 非常对错误保密。

有关如何解决此问题,请参阅How to squeeze error message out of PDO?

答案 1 :(得分:2)

请尝试改为准备此查询:

"INSERT INTO mytable (NAME, DESCRIPTION, ENTRYDATE) VALUES(?,?,CUR_DATE())"

并检查$stmt->execute()的结果。它会向您发出警告,"CUR_DATE()"(原文如此)不是有效的DATE

您可以通过检查execute()的返回值并查询errorInfo()方法来检查语句是否正确执行:

if (!$stmt->execute()) {
   throw new Exception($stmt->errorInfo(), stmt->errorCode());
}

请注意,失败时,execute()不会自动抛出异常。你必须检查自己的成功操作和失败。

答案 2 :(得分:2)

如何用DESCTIPTION中的DESCRIPTION替换$query

修改

出于好奇,我创建了一个名为mytable的表,并将您的代码复制粘贴到PHP脚本中。

此处一切正常并插入行,但绑定参数CURDATE()未正确执行且ENTRYDATE单元格已分配0000-00-00

您确定要监视脚本应该插入的相同数据库和表吗?

error_reporting(E_ALL);合作时会发生什么?

您是否确认该脚本实际完成了插入?

以下似乎按预期工作:

error_reporting(E_ALL);

try {
    $query = "INSERT INTO mytable (NAME, DESCRIPTION, ENTRYDATE) VALUES (?, ?, CURDATE())";
    $stmt = $conn->prepare($query);
    $name= 'something';
    $desc = 'something';
    $stmt->bind_param("ss", $name, $desc);
    $stmt->execute();

     if ($conn->affected_rows < 1) {
        throw new Exception('Nothing was inserted!');
     }

    $stmt->close();
    $conn->close();
    //redirect to success page
}
catch(Exception $e) {
    print $e->getMessage();
}

答案 3 :(得分:0)

自动提交是否可能关闭?

如果是这样,那么你必须像这样提交你的插入

/* commit transaction */
$conn->commit();

此致