Php mysqli插入异常

Php mysqli插入异常,php,insert,mysqli,row,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=

我有下表:

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;
}

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

您确定没有错误吗?例如,您的列名中似乎有输入错误

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


请参阅如何解决此问题。

请尝试准备此查询:

"INSERT INTO mytable (NAME, DESCRIPTION, ENTRYDATE) VALUES(?,?,CUR_DATE())"
并检查
$stmt->execute()
的结果。它会警告您,
“CUR_DATE()”
(原文如此)不是有效的
日期

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


请注意,失败时,
execute()
不会自动引发异常。您必须自己检查操作是否成功和失败。

$query
中用
说明
替换
说明
怎么样

编辑

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

这里一切正常,插入了行,除了绑定的参数
CURDATE()
没有正确执行,并且
ENTRYDATE
单元格被分配
0000-00-00

您确定正在监视脚本应该插入到的同一数据库和表吗

使用
错误报告(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();
}
错误报告(E_ALL);
试一试{
$query=“插入mytable(名称、说明、ENTRYDATE)值(?,CURDATE())”;
$stmt=$conn->prepare($query);
$name='something';
$desc=‘某物’;
$stmt->bind_参数(“ss”,$name,$desc);
$stmt->execute();
如果($conn->受影响的\u行<1){
抛出新异常('未插入任何内容!');
}
$stmt->close();
$conn->close();
//重定向到成功页面
}
捕获(例外$e){
打印$e->getMessage();
}

自动提交是否可能已关闭

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

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

作为旁注,您可以让SQL server执行
NOW()
函数,而无需在php中执行额外的步骤。很抱歉这里的输入错误。刚刚更正了。这个错误只在这篇文章里。我真正的疑问是好的。对不起。我刚刚纠正了它。我正在使用mysqli,而不是PDO@Deepak啊,我明白了。很抱歉但问题仍然存在:一个无效的查询不会抛出一个异常,但它仍然在表中显示成功但没有条目。有什么想法吗?试过了。似乎有错误。它不会重定向,但不会显示错误。我的catch异常不应该抛出错误吗?有什么想法吗?谢谢,我只需检查一下这段代码,就得到了“object(mysqli_stmt)#2(0){}”。这是什么?似乎CURDATE()与此有关。有什么想法吗?谢谢您的时间。是的,我有一个单独的config.php文件。刚洗过,很好。错误报告(E_全部);仍然没有显示任何错误。谢谢!这段代码现在可以使用了。我按照建议在内部尝试了CURDATE()并绑定了其他参数。现在可以了。再次感谢。
/* commit transaction */
$conn->commit();