如果PHP准备语句失败,一旦后续准备也失败了?

时间:2015-03-11 02:55:24

标签: php mysqli

这里有两个功能: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连接上清除错误缓冲区吗?

0 个答案:

没有答案
相关问题