我正在开发一个网站界面,以便我的同事可以轻松地将元组添加到数据库中。我不明白为什么这段代码不起作用,我希望有人能帮助我。谢谢。
$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();
最佳答案
您没有检查 prepare
和 execute
函数是否成功。
如果您不打算检查这些函数的返回结果,则可以通过设置连接属性,让 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/