我正在开发一个网站界面,以便我的同事可以轻松地将元组添加到数据库中。我不明白为什么这段代码不起作用,我希望有人可以帮助我。感谢。
$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();
答案 0 :(得分:0)
bind_param需要引用:
$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();
答案 1 :(得分:0)
您没有检查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());
}
使用其中一种方法,可能会发现数据库错误正在发生。实际的错误代码和消息将有助于确定实际问题是什么。否则,我们只是在猜测。
答案 2 :(得分:0)
当您使用PDO时,此处的正确过程是将所有值作为数组传递给execute()方法:
$statement->execute(array('sssssssssisss', $_POST['mouseid'], [...]));
或者对每个值使用bindParam()/ bindValue(),但是你必须使用命名参数(:parametername)。
对于未来:检查所有方法的返回值,启用错误报告/日志记录,使PDO在错误($databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
)上抛出异常并最终在您的问题中发布任何显示的错误消息,这有助于回答它。