我有一个小(而且很愚蠢)的问题:我正在使用 mysqli 和 MySQL 服务器构建一个 PHP 应用程序。当应用程序被加载时,一个名为 $database 的变量被初始化使用
$database = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
当然,这非常有效。如果我创建一个语句来进行查询:
$stmt = $database->prepare('SELECT a, b, c FROM table WHERE a = ?');
这仍然有效。但是,如果我尝试在不关闭前一个语句的情况下创建另一个语句,则有时可行,有时现在可行。创建语句失败时我得到的错误是:
Fatal error: Call to a member function bind_param() on a non-object
我的问题是:为什么?我应该怎么做,每次我想创建一个新语句(并且我有另一个打开)时打开一个连接(新的mysql(...))?
例子
$stmt = $database->prepare('SELECT a, b, c FROM table WHERE a = ?');
$stmt->bind_param('i', $aValue);
$stmt->execute();
/* do some other operations, without closing $stmt */
$stmt2 = $database->prepare('INSERT INTO table2 (e, f) VALUES (? ,?)');
// Now, $stmt2 isn't initialized, so when the next line is run, the app fails
$stmt2->bind_param('ss', $someValue, $anotherValue);
如果,之前
$stmt2 = $database->prepare('INSERT INTO table2 (e, f) VALUES (? ,?)');
我添加一个简单的
$stmt->close();
所有作品都没有任何问题。那么,问题是什么?