php - 准备好的语句出现问题

标签 php mysql

我正在开发一个网站界面,以便我的同事可以轻松地将元组添加到数据库中。我不明白为什么这段代码不起作用,我希望有人能帮助我。谢谢。

$query = "INSERT INTO animal (MouseID,birthDate,harvestDate,injectionDate1,
    injectionDate2,injectionDate3,Adjuvant,Target,Gender,Age,animalType,
    Titer,antibodyType) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";

    $statement = $databaseConnection->prepare($query);
    $statement->bind_param('sssssssssisss', $_POST['mouseid'], $_POST['birthdate'], $_POST['harvestdate'], $_POST['injectiondate1'], $_POST['injectiondate2'],
     $_POST['injectiondate3'], $_POST['adjuvant'], $_POST['target'], $_POST['gender'], $_POST['age'], $_POST['animaltype'], $_POST['titer'], $_POST['antibodytype']);
    $statement->execute();
    $statement->close();

最佳答案

您没有检查 prepareexecute 函数是否成功。

如果您不打算检查这些函数的返回结果,则可以通过设置连接属性,让 PDO 自动执行检查,并在发生数据库错误时引发异常:

$databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

如果您不检查函数的返回,那么您的代码实际上会“吞噬”发生的任何数据库错误。

设置这些连接属性并不是处理数据库错误的唯一方法,而且并不总是最合适的方法。

另一种选择是显式检查代码中函数的返回,例如:

$sql = "INSERT INTO ... ";

$stmt = $dbh->prepare($sql);
if(!$stmt) {
   print_r($dbh->errorInfo());
}

if(!$stmt->execute()) {
   print_r($dbh->errorInfo());
}

使用其中一种方法,很可能会发现正在发生数据库错误。实际的错误代码和消息将有助于确定实际问题是什么。否则,我们只是猜测。

关于php - 准备好的语句出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772697/

相关文章:

php mysql sql select问题: syntax?结构?绑定(bind)?

mysql - mysql 中主键的重复条目

php - 使用 Zend Framework 级联 MySQL 提交

mysql - 无法将空白日期字段导入 MySQL 数据库

mysql - 如何为特定行的 UPDATE 同步 TRIGGER 执行?

mysql - 如何用 MySQL DB 替换 SQL DB 并启用 Entity Framework Code First?

php - SQL 查询构造

php - 缓存和调整图像大小而不缩小或拉伸(stretch)?

javascript - 基于 Javascript 函数值,通过 PHP 检索数据库数据

php - 从数据透视表中选择所有行