![](/img/trans.png)
[英]$mysqli->prepare returns false, but $mysqli->error is an empty string
[英]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.