最初の準備ステートメントが正常に機能するのに、2 番目のステートメントが機能しない理由を理解しようとしています。実際の INSERT INTO 構文は正しいように見え、数値を置き換えて mysql コンソールに配置すると機能しますが、準備ステートメントは false を返します。
簡単な質問を片付けるために。$db_table_prefix == "uc_" で、すべての変数が初期化されます。また、最初のステートメントは $results == 0 を設定します (編集: これは私の間違いでした。実際には 1 ではなく 0 です)。
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 |
+----------+---------------------+------+-----+---------+----------------+
簡単なものが欠けているだけだと思いますが、数日間コードを見つめた後、質問する必要がありました。助けてくれてありがとう。他に含めるべき情報があれば教えてください。