MySQL初心者の私の備忘録です。基本的にPHPを使った対処法です。

 

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)

最初の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);

で解決。

 



ȥåץڡ