- この記事について
- Warning: Undefined array key “action” in /var/www/html
- Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in /var/www/html/
- Fatal error: Uncaught Error: Call to undefined function mysql_query() in /var/www/html/
- Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in /var/www/html/
- Fatal error: Uncaught Error: Call to undefined function mysql_num_rows() in /var/www/html/
- Fatal error: Uncaught Error: Call to undefined function mysql_data_seek() in /var/www/html/
- まとめ:書き換え対応表
この記事について
| 環境 | サーバー移行でPHP 5.6.30 → 8.3.13 |
|---|---|
| 目的 | 移行で出たエラーと書き換え方を記録する |
| 結果 | mysql_*系の廃止関数をmysqliに置き換えて解消 |
つまずきポイント要約
- mysql_*系関数はPHP 7で全廃止。mysqliかPDOへ書き換える
- 未定義の配列キーはNoticeからWarningに格上げされた。
isset()や??でチェックする - トランザクション系は
$db->autocommit(false)と$db->commit()に集約
webサイトのサーバー移行のときにPHPのバージョンも変わった。
PHP 5.6.30 → PHP 8.3.13
このページでは、その時に出たエラーをまとめる
Warning: Undefined array key “action” in /var/www/html
未定義の配列キーを参照しようとするとき、PHP 5.6 の場合には単に Notice として表示されることが多かったが、PHP 8.3 ではより厳密になり、警告 (Warning: Undefined array key) が発生する。
このエラーを解消するには、以下のように安全に配列キーをチェックしてから参照する方法を採用する必要がある。
修正前
$action = $_GET['action'];
修正後
if (isset($_GET['action']) && $_GET['action'] === 'some_action') {
// 特定のアクションに対応する処理
}
Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in /var/www/html/
mysql_real_escape_string() は廃止されたので、代わりに、mysqli_real_escape_string() や PDO::quote() を使う必要がある。
Fatal error: Uncaught Error: Call to undefined function mysql_query() in /var/www/html/
mysql_query() は廃止されたので、代わりに、mysqli_query() や PDO を使う必要がある。
Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in /var/www/html/
mysql_fetch_assoc() は廃止されたので、代わりに、mysqli_fetch_assoc() や PDO を使う必要がある。
Fatal error: Uncaught Error: Call to undefined function mysql_num_rows() in /var/www/html/
mysql_num_rows() は廃止されたので、代わりに、$result->num_rows や PDO を使う必要がある
// mysql_query("SET AUTOCOMMIT = 0"); //オートコミットを無効にする
// mysql_query("begin"); //トランザクション開始
↓↓↓↓↓↓
$db->autocommit(false); //オートコミット無効化とトランザクション開始
//mysql_query("commit"); //ここで上記二つの処理が同時に実行される
↓↓↓↓↓↓
$db->commit(); //ここで上記二つの処理が同時に実行される
Fatal error: Uncaught Error: Call to undefined function mysql_data_seek() in /var/www/html/
mysql_data_seek($result, 0);
↓↓↓↓↓↓
$result->data_seek(0); OR mysqli_data_seek($result, 0);
まとめ:書き換え対応表
| PHP 5.6(廃止) | PHP 8.3での書き換え |
|---|---|
mysql_real_escape_string() | mysqli_real_escape_string() / PDO::quote() |
mysql_query() | mysqli_query() / PDO |
mysql_fetch_assoc() | mysqli_fetch_assoc() / $result->fetch_assoc() |
mysql_num_rows() | $result->num_rows |
mysql_data_seek() | $result->data_seek() / mysqli_data_seek() |
