【PHP】エラーが出たときのチェック項目

■絶対に覚えておくこと

・エラーメッセージが出た場合、そこをまず調べるが、その行が必ず間違っているというわけではない。

なので、その行を確認してミスがなかったら、他の箇所に間違っているところがないか調べる。
エラーの箇所だけにとらわれないようにする。

$が抜けている

スペルを間違えている

大文字と小文字を間違えている

$_POSTや$_GETは大文字でないと動かない。

記述していないコードがある

書籍のコードを書き写しているときにありがち。
既存のファイルをコピーして改変していると、一番最初に書くべきコードを書き忘れていたりする。

1つ前のコードに間違いがある

「'」「"」「.」「,」「;」といった記号が抜けていたり、逆に多いなど。

 VScodeだと、1個前のコードに記号の抜けがある場合、次のコードにエラー表記が出るので特に注意する。

画像1

■フレームワーク(CakePHPなど)

大文字と小文字を間違えている

PHPと同じだが、ここを間違えると全く動かないので注意する。

$post = $this->Posts->get($id);
/ $変数 = $this->テーブル名->get($id)

$this->set('post', $post);
/ $this->set('変数名', 変数名に対応する値);

不要な$が付いている

$post = $this->$Posts->get($id);

$this->のあとは$は要らないので、正しい書き方は以下となる。

$post = $this->Posts->get($id);

CakePHP エラーの切り分け方

1. exitを処理の後に書いて、そこまでの記述でエラーが出るかどうかチェック。

エラーが出なければ、そこまでのコードに問題はないということなので、これで切り替えしていく。

2. 継承元が間違っていないか?

class UsersController extends AppController
{
・
・
・}

3. namespaceのパス

ここを間違えていると、違うファイルを読みにいってしまう。
同じ名前のコントローラがある場合など、気づきにくいので注意。

namespace App\Controller\Admin;

4. コンポーネントの読み込み宣言がされていない

たとえば、パスワードのハッシュ化をするメソッドを使うときは以下のコンポーネントの読み込みをする必要がある。

Model/Entity/Adminusers.php

use Cake\Auth\DefaultPasswordHasher;

■データベース操作

変数名を間違えている。

$select = $pdo->prepare("SELECT * FROM member LEFT JOIN post ON 
member.user_id = post.user_id WHERE member.user_id = :id 
ORDER BY created_at DESC LIMIT :start,:max ");

$stmt->bindValue(':id', $myId, PDO::PARAM_INT);

上記コードの場合、最初の変数を$selectにしているのに、次のbindValueの行は$stmtにしているので、そりゃ動かないよねという話。

この場合、

$select->bindValue(':id', $myId, PDO::PARAM_INT);

とすればOK。

この記事が気に入ったらサポートをしてみませんか?