Php mysqli中的错误->;准备插入语句

Php mysqli中的错误->;准备插入语句,php,mysqli,prepare,Php,Mysqli,Prepare,我试图弄明白为什么我的第一个prepare语句工作得很好,而我的第二个语句却不行。当我替换数字并将其放在mysql控制台中时,实际的INSERT INTO语法看起来是正确的,但prepare语句返回false 只是为了澄清一些简单的问题$db_table_prefix==“uc_”,所有变量都已初始化。另外,第一条语句将$results==0(EDIT:这是我的错误,它实际上是0,而不是1) 我肯定我只是错过了一些简单的东西,但是在盯着代码看了几天后,我需要问一下。提前谢谢你的帮助。请告诉我是否

我试图弄明白为什么我的第一个prepare语句工作得很好,而我的第二个语句却不行。当我替换数字并将其放在mysql控制台中时,实际的INSERT INTO语法看起来是正确的,但prepare语句返回false

只是为了澄清一些简单的问题$db_table_prefix==“uc_”,所有变量都已初始化。另外,第一条语句将$results==0(EDIT:这是我的错误,它实际上是0,而不是1)


我肯定我只是错过了一些简单的东西,但是在盯着代码看了几天后,我需要问一下。提前谢谢你的帮助。请告诉我是否还有其他信息需要包含。

您忘记关闭第一个资源。我认为,如果第一份声明没有结束,它就无法打开第二份准备好的声明。我认为
$mysqli->prepare(…)将返回false,显然
false->bind_param(…)不存在;-)导致
致命错误:对非对象调用成员函数bind_param()
-错误

global $mysqli,$db_table_prefix;

$stmt = $mysqli->prepare("SELECT COUNT(id) FROM ".$db_table_prefix."attempts WHERE ((exp_m = ?) AND (exp_n = ?) AND (max_base <= ?))");
$stmt->bind_param("iii", $m, $n, $this->max_base);
$stmt->execute();
$stmt->bind_result($results);
$stmt->fetch();
$stmt->close(); //<-- this is the problem

if ($results < 1)
{ 
  $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."attempts (exp_m, exp_n, base_x, max_base) VALUES (?,?,?,?)");
  $stmt->bind_param("iiii", $m, $n, $x, $this->max_base);

  .....
}
global$mysqli,$db\u table\u前缀;

$stmt=$mysqli->prepare(“从“$db_table_prefix”中选择COUNT(id)。根据返回的第二个prepare语句尝试WHERE((exp_m=?)和(exp_n=?)和(max_)。启用错误报告并查看它是否抛出异常
$mysqli->error
可能提供更多信息。致命错误:调用成员函数bind_param()在第28行的/var/www/Beal/models/class.user.php中的非对象上注意:第28行是第二个bind_参数行
$mysqli->error
没有提供任何内容,它只是空的。您先生/女士是个天才。我已经盯着它看了两天了。非常感谢您的帮助,也感谢所有其他人。
mysql> describe uc_attempts;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| exp_m    | bigint(20) unsigned | NO   |     | NULL    |                |
| exp_n    | bigint(20) unsigned | NO   |     | NULL    |                |
| base_x   | bigint(20) unsigned | YES  |     | NULL    |                |
| max_base | bigint(20) unsigned | NO   |     | NULL    |                |
| id       | int(11)             | NO   | PRI | NULL    | auto_increment |
+----------+---------------------+------+-----+---------+----------------+
global $mysqli,$db_table_prefix;

$stmt = $mysqli->prepare("SELECT COUNT(id) FROM ".$db_table_prefix."attempts WHERE ((exp_m = ?) AND (exp_n = ?) AND (max_base <= ?))");
$stmt->bind_param("iii", $m, $n, $this->max_base);
$stmt->execute();
$stmt->bind_result($results);
$stmt->fetch();
$stmt->close(); //<-- this is the problem

if ($results < 1)
{ 
  $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."attempts (exp_m, exp_n, base_x, max_base) VALUES (?,?,?,?)");
  $stmt->bind_param("iiii", $m, $n, $x, $this->max_base);

  .....
}