私はその列とテーブル名(単純な文字列)に挿入される列の名前と値の連想配列に基づいて準備されたINSERT文を生成する関数があります:私の問題は、その$であるMysqli Prepare Statement - Falseを返しますが、なぜですか?
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
をthis-> conn-> prepare(これはクラスの一部ですが、connは問題なしで動作するNEW mysqliオブジェクトです)はfalseを返しますが、なぜ私に理由がないのですか?ここで
は、準備文のために構築されますサンプルの$ SQLSTRINGです:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
誰もがこのパラメータ化ステートメントを使用して問題を見ることができますか?準備関数がfalseを返す理由は何ですか?
エラーメッセージが表示されますか(http://php.net/manual/ja/mysqli.error.phpではprepareがfalseを返します)。はいの場合、それは何ですか? –
データベースで実際のINSERT文を実行しようとしましたが、正しいSQLがあることを確認しましたか? – DOK
mysqli_report(MYSQLI_REPORT_ALL)を有効にして、何が起こっているのかをよく理解しています。フィールド名の1つが間違っていることが判明しました。prepare()は例外をスローしますが、 –