每次我想在PHP中运行查询时,我应该初始化MySQL吗?

时间:2012-08-08 17:14:17

标签: php mysql mysqli

我有一点(和愚蠢)问题:我正在使用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();

所有工作都没有任何问题。那么,问题是什么?

2 个答案:

答案 0 :(得分:2)

在获取之前的所有结果之前,您无法再运行其他查询。否则你将不得不单独建立连接。

答案 1 :(得分:0)

你还记得bind_param&执行 ? :

$stmt->bind_param("s", $string);
$stmt->execute();
//etc..

OR

$stmt->bind_param("i", $int);
$stmt->execute();
//etc..

如果您想要多个查询:请查看multi_query