[MySQL]エラー集
トップページへ
MySQLの私の備忘録です。基本的にPHP(楽天市場で探す ・ amazonで探す)を使った対処法です。
Q. エラー「#1054 – Unknown column ‘テーブルA.place’ in ‘where clause’」
直訳→「不明な列、WHERE句のテーブルA.place」
A.同じSQL文内で「FROM テーブルA as t1」と「テーブルAをt1」と別名で再定義しているのに「テーブルA.place」と使おうとしていたため。
「t1.place」に修正することで解決しました。
Q. エラー「Uncaught Error: Call to a member function prepare() on null」
A. $dbh = new PDO(・・・ を間違ってコメントアウトしてしまっていたため、prepare()文で「null」となって実行できない状態でした。
Q. エラー「SQLSTATE[HY093]: Invalid parameter number」が出た
A. 原因は「同じパラメータを2回使っていた」からでした。
頭の中では「new_codeで一致するレコードを選択し、項目old_codeにnew_codeをセットするだけ」なのですが、一致するためのパラメタと値をセットするパラメタを「同じ :a」で定義していたためでした。
中身が同じ値であっても、パラメータは別にしないといけない模様です。
誤 UPDATE table SET old_code =:a, memo =:b WHERE new_code =:a;
正 UPDATE table SET old_code =:a, memo =:b WHERE new_code =:c;
Q. エラー「Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined 」(無効なパラメータ番号:パラメータが定義されていない)が出る
A. SQL文の「大文字、小文字の違い」によるエラーでした。
パラメタでは小文字の「:key」を指定しているにもかかわらず
$stmt->bindParam(‘:key’, $w_number, PDO::PARAM_STR)
SQL文内のパラメータのKを大文字にしていたのが原因
誤 DELETE FROM %s WHERE ID =:Key
正 DELETE FROM %s WHERE ID =:key
Q.INSERT文で日付型の値として「2021-11-19」をセットしたら「0000-00-00」となった
A.日付だけで良いのなら「’2021-11-19’」とセットすることで回避しました。時刻も付加するなど他に良い方法があるかもしれません。
Q.SQLを実行したら次のエラー「Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your DB server version for the right syntax to use near ‘ ID =?, kind =?, hinban =?’ at line 1」が出た
A.
原因
INSERT文をコピペしてUPDATE文に変えたにも関わらず、WHERE句をUPDATE用に修正していなかったため
誤
WHERE naibu =:key, ID =:a, kind =:b, hinban =:c
正
WHERE (naibu =:key) AND (ID =:a) AND (kind =:b) AND (hinban =:c)
Q.[phpMyAdmin]データを追加した後、「NULLは許可できない」といったエラーメッセージが表示された
A.phpMyadminのテーブル定義で、その項目の「NULL」にチェックを入れて、NULLを許可する。
Q.[phpMyadmin]エラーメッセージが表示されて「AUTO_INCREMENT(自動採番、自動番号付け)の設定ができない」
A.考えられる解決方法として
α NULLを許可しない、「いいえ」にする
β αで対応できなければ、その項目を「主キー」とする
他にも方法はありそうです。
Q.エラーメッセージ「Fatal error: Uncaught Error: Cannot pass parameter 2 by reference」
A. 「パラメータをとらえられない」と訳せたので
修正前
$stmt->bindParam(':b', 330001, PDO::PARAM_STR);
↓
コードを直接セットせずに変数に変更して修正
修正後
$key = 330001; $stmt->bindParam(':b', $key, PDO::PARAM_STR);
で解決。