質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

3130閲覧

mysqlからmysqliに書き換えたいけど記述の仕方が分からない

ts0927

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/08 01:53

初めまして。
質問を確認して頂き、ありがとうございます。
PHPやmysqlに関して全くの初心者ですので、アドバイス頂けましたら幸いです。

前提・実現したいこと

数年前にとあるサイトを引き継ぎました。
サイト自体は反映されているのですが、記事を投稿しようとすると、
反映されない現象が数日前から発生しております。
エラーログを確認すると、下記のメッセージが表示されておりました。

調べたところ、mysqlからmysqliに書き換える必要があるとのことですが、
記述の仕方がまったく分からず、困っております。
お手数おかけしますが、ご教授お願い致します。

発生している問題・エラーメッセージ

PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/m125b323/public_html/epilepsysymposia.com/php/db.php on line 15

該当のソースコード

mysql

1<?php 2set_time_limit(0); 3class db{ 4 //DB接続情報 5 private $_host = DB_HOST; 6 private $_id = DB_ID; 7 private $_pass = DB_PASS; 8 private $_dbname = DB_DBNAME; 9 //変数の設定 10 private $_sql; 11 private $_connection; 12 13 private function connectDb(){ 14 15 $con = mysql_connect($this->_host, $this->_id, $this->_pass); 16 17 if (!$con) { 18 return; 19 } 20 //使用するデータベースを選択 21 22 $result = mysql_select_db($this->_dbname, $con); 23 24 if (!$result) { 25 return; 26 } 27 return; 28 } 29 30 //DB接続開始 31 public function __construct($connecttype = NULL) { 32 if ($this->_connection == null) { 33 34 $this->_connection = $this->connectDb(); 35 mysql_query("SET NAMES utf8"); 36 mysql_query("SET QUERY_CACHE_TYPE = 0"); 37 } 38 } 39 //接続を返す 40 public function getConnection(){ 41 return $this->_connection; 42 } 43 //配列を一行返す 44 public function fetch($sql) { 45 $this->_sql = mysql_query($sql); 46 47 if ($this->_sql === false) { 48 return false; 49 } elseif (empty($this->_sql)) { 50 return array(); 51 } 52 53 //結果を一行だけ返す関数 54 return mysql_fetch_array($this->_sql, MYSQL_ASSOC); 55 } 56 57 //全件を多次元配列で取得 58 public function fetchAll($sql) { 59 $all = array(); 60 $this->_sql = mysql_query($sql); 61 62 while ($re = mysql_fetch_assoc($this->_sql)) { 63 $all[] = $re; 64 } 65 return $all; 66 } 67 public function mysqlquery($sql){ 68 mysql_query($sql); 69 } 70 //最後にDBを切断 71 public function __destruct() { 72 mysql_close(); 73 } 74} 75?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/08 01:57

Deprecatedは致命的なエラーではなく「もうサポートしてないから使うなよ」くらいのおせっかいです。本当の原因は他にあるのではないかと思われます。
退会済みユーザー

退会済みユーザー

2019/03/08 01:59

レンタルサーバーなどで、サーバー業者がOSなどテコ入れしてPHPのバージョンを上げたりすると、古いコードのまま実行すればそういうメッセージが出てもおかしくはない。php.iniでerror_reportingを設定しなおせばDeprecatedを出力しないこともできるけども。参考:http://pentan.info/php/deprecated.html
ts0927

2019/03/08 02:01

ありがとうございます! そうなんですね・・・ 追加で質問させて頂いてもよろしいでしょうか。 もしこのエラーが問題でない場合、どういった点を見れば 原因を追及できるのでしょうか? 初歩的な質問で申し訳ございません。
m.ts10806

2019/03/08 02:15

pdo利用が強く推奨されていますが(mysqliはそれだけ扱いが簡単ではない)、それでもmysqliじゃないとダメなのでしょうか。
ts0927

2019/03/08 02:20

ありがとうございます! mysqliでないとだめだということはありません。 問題が解決するのであれば、pdoでも問題ありませんが、 pdoの記述方法も分からずmysqliのほうが取っ付きやすそうだったので そちらを質問させていただきました。
退会済みユーザー

退会済みユーザー

2019/03/08 02:23

webサーバープログラムの出力するエラーログファイルがどこにあるか特定して読みこなすしか。レンタルサーバーだとコントロールパネルなどから簡単に参照することができます。
guest

回答4

0

PHPやmysqlに関して全くの初心者

こんな状態で外部にサイトを晒すと、Botnet に組み込まれます。
キチンと学習するか、外部委託するかしてください。

SET NAMES utf8とかしているので、そのままの移行するとセキュリティに対しての考え方が古いです。
全体を見直すことをオススメします。

投稿2019/03/08 02:38

編集2019/03/08 02:58
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この手の質問はたまにできてますが、そのたびにpdoを選択するようにすすめる回答が出ますし、
そのまままともに解決に至れた質問を見たことがないです。
たぶん、まともに解決に至れる人であればそもそも質問せずとも解決できる、それくらい難関ということです。

mysqliへの移行を「とっつきやすい」だけで選択すると必ず痛い目を見ます。
pdoにするにしてもphpマニュアルを見ながら行うのは同じですし、運用のしやすさならpdo以外の選択肢はないと言ってもいいです。
特に初心者であるならphpマニュアル確認と検証と共にこのような記事(phpでDB関係の質問が出るとほぼ必ず参考リンクとして提示されるくらい優秀なものです)をしっかり読んで理解していくようにしてください。
「とりあえずmysqliってしとけばいいんでしょ」だけの認識だと本来導入すべきこと、排除すべきことが適切に行われないのでいつまでたっても移行は終わりません。
全て作り直した方が早いくらいです。それならpdoにすべきですね。

ちなみにですが、私の場合、mysqliに移行としてもほぼほぼ作り直しを選択します。
mysql関数時代に作られたと言うことはそれだけセキュリティ対策も緩めのものであるはずだし、
今には今に合った組み方があるので、単に置き換えだけは絶対にしません。

投稿2019/03/08 03:51

編集2019/03/08 04:00
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

mysqlに対する経験がうすく先入観がないならmysql_→mysqli_ではなく
PDOに一気にシフトすることをお勧めします

投稿2019/03/08 02:22

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2019/03/08 01:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ts0927

2019/03/08 01:59

ありがとうございます!確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問