簡體   English   中英

mysqli->使用insert語句進行准備時出錯

[英]Error in mysqli->prepare with insert statement

我試圖弄清楚為什么我的第一個prepare語句可以正常工作,而我的第二個prepare語句卻不能工作。 當我替換數字並將其放在mysql控制台中時,實際的INSERT INTO語法看起來正確並且可以使用,但是prepare語句返回false。

只是為了清除簡單的問題; $ db_table_prefix ==“ uc_”並初始化所有變量。 另外,第一條語句設置$ results == 0(編輯:這是我的錯誤,它實際上是0,而不是1)。

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();

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);

  .....
}

我已經包括了表結構,以防萬一。

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 |
+----------+---------------------+------+-----+---------+----------------+

我確定我只是缺少一些簡單的東西,但是在盯着代碼幾天后,我需要問一下。 先謝謝您的幫助。 請讓我知道我是否應該包括其他信息。

您忘記關閉第一個資源。 我相信,如果沒有關閉第一個准備好的語句,它將無法打開。 我認為$mysqli->prepare( ... ); 然后將返回false,顯然返回false->bind_param( ... ); 不存在;-)導致Fatal error: Call to a member function bind_param() on a non-object錯誤Fatal error: Call to a member function bind_param() on a non-object

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);

  .....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM