这里有两个功能:http://pastebin.com/CNLBBMZ2(第11行故意错误) 以下是它的名称:http://pastebin.com/VBxvE4D9
在第一次准备失败后,我无法正常准备第二个功能。我正在使用mysqli准备好的语句。
为简单起见,假设我有两个布尔函数。
调用用户表单提交的第一个函数在我的数据库中创建一个记录。第二个函数列出数据库中的所有记录,并在每次加载页面时调用,而不管用户输入如何。
这是第一个功能的一部分
//connect to database
$dbh = db_connect();
//Transaction to create all the records necessary for this house
$dbh->autocommit(FALSE);
// 1. query to insert a new house table record
if ( $stmt_create_house = $dbh->prepare("
INSERT INTO house (nickname, dateCreated, userID)
VALUES ( ? , ? , ?)
")) {
//bind param
$today = date('Y-m-d');
$stmt_create_house->bind_param( 'sss', $_POST['house-nickname'], $today, $_SESSION['user_id'] );
} else {
$dbh->close();
$create_error_message = "The query to create a new house record was malformed.";
return FALSE; //jumps out of the function
}
... rest of function
如果我故意在第一个函数中使第一个prepare语句失败,那么第二个完全不相关的函数也会失败。我故意通过输入错误的列名称或者为了测试而使其格式错误而使第一个语句失败。
我希望第二个函数能够仍然从数据库中提取记录,即使第一个语句由于某种原因失败了。这是我的第二个函数中的代码部分。当第一个prepare语句失败时,此If语句失败。
//connect to database
$dbh = db_connect();
if ( $stmt_get_houses = $dbh->prepare("
SELECT houseID, nickname, dateCreated
FROM house
WHERE userID = ?
")) {
我无法弄清楚为什么在函数中准备失败会影响第二个函数。每次我输入错误时都会关闭$ dbh。即使我关闭它,我还必须在$ dbh连接上清除错误缓冲区吗?