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

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

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

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

mysqli

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1528閲覧

mysqlからmysqli に関数変換(手続き型)でデータベースを読み込んでいないかも

creator.M

総合スコア80

MySQL

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

mysqli

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/03/31 23:13

編集2021/03/31 23:37

古いシステムのサーバー移転を試みています。
PHPのソースコードで、mysqlが使われているため、データベース接続などの箇所でエラーが出ましたので、修正しました。
でも、パラメータの一つがNULLと想定されますというエラーが出てしまい、解決できないでいます。

解決策をぜひ、教えてください。
お願いします。

php

1//データベース接続 2include("../database.php"); 3$con = mysqli_connect("$GLOBALS[db_add]","$GLOBALS[db_user]","$GLOBALS[db_pass]","$GLOBALS[db_name]"); 4if (mysqli_connect_errno()) { 5 printf("Connect failed: %s\n", mysqli_connect_error()); 6 exit(); 7} 8//命令のエラーをチェック 9mysqli_query($con, 'set names utf8'); 10if (!mysqli_query($con, "set names utf8")) { 11 printf("Errormessage: %s\n", mysqli_error($con)); 12} 13 14//$con = mysqli_connect("$GLOBALS[db_add]","$GLOBALS[db_user]","$GLOBALS[db_pass]")or die("接続エラー"); 15//$db = mysqli_select_db($con,"$GLOBALS[db_name]") or die("Error"); 16 //if (!$db){ 17 // die('データベース選択エラー'.mysqli_error()); 18 //}

コメントアウトしている部分が、下のソースコードです、

この下が、エラーになるソースコードです。

php

1function page_header(){ 2//$spl = mysql_query($con,"select * from setting"); 3$sql = "select * from setting"; 4$result = mysqli_query($con,$sql); 5//mysql_fetch_array($result); 6mysqli_fetch_array ( $result , MYSQLI_BOTH ); 7

エラーコードです。
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in
です。

先にデータベースの文字化けの質問をしていますが、データベースが文字化けしているために読み込みできないのか、ソースコードの書き方が間違っているからエラーなのか判別が難しいです。

ネットで調べながらコードを修正していますので、手探りです。
稚拙な質問かもしれないですが、何卒お願いします。

使われているPHPのソースが書かれているファイルの文字コードが、ECU-JPです。
PHPで書かれているHTMLのヘッダーの文字コード指定が、ECU-JPです。

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

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

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

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

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

guest

回答2

0

DB接続用オブジェクト変数の$conをどこからも引っ張ってきてません。引数に入れましょう。

PHP

1function page_header(){ 2//$spl = mysql_query($con,"select * from setting"); 3$sql = "select * from setting"; 4$result = mysqli_query($con,$sql); 5//mysql_fetch_array($result); 6mysqli_fetch_array ( $result , MYSQLI_BOTH );

あとエンコードのやり方が公式非推奨の方法です。

mysqli_queryでエンコードセットはしないほうがいいです。mysqli_set_charsetを使いましょう。

mysqli_set_charset

なので、そこでエンコードが失敗してfalseを返す可能性があります。

投稿2021/04/01 02:23

FKM

総合スコア3635

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

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

creator.M

2021/04/01 03:27

ありがとうございます。 ”setting”は、テーブル名です。 コメントアウトされているコードは、サーバー移転前に正常に動いていたコードです。 $spl = mysql_query($con,"select * from setting"); mysqliに書き換えたら、エラーが出るようになりました。 MyAdminでデータベースを確認すると文字化けしていますが、古いサーバーでは、今でも正常に稼働しています。 データも使えます。
FKM

2021/04/01 04:16

$conは関数に引っ張ってきてないようですが…そこから見直しましたか? PHPは関数の中はその中でしか変数のスコープが適用されないので、外部から取得する必要があります。
creator.M

2021/04/01 06:43

すみません。 恥ずかしい限りです。 古い方でglobal指定しなくても動いていたので、見落としてました。
guest

0

ベストアンサー

page_header()が$con引き継いでないのでは?
引数で受けるか、グローバルで処理するか、クラスでメンバ変数でうけとるか

投稿2021/04/01 00:47

yambejp

総合スコア114839

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

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

creator.M

2021/04/01 03:05

ありがとうございます。 $conをグローバルに指定して試しましたが、変化なかったです。
yambejp

2021/04/01 03:09

具体的にどうやったか提示ください やり方が間違っていれば当然結果はかわらないでしょう
creator.M

2021/04/01 03:30

すみません。 ```php <? session_name("******"); session_start(); global $con; ``` のように、コードの先頭の方に、書いてみました。
yambejp

2021/04/01 04:08 編集

page_header()の中でglobal指定してないのですか? 処理的にはこう $con=1; function page_header(){ global $con; var_dump($con); } page_header();
creator.M

2021/04/01 06:41

申し訳ありません。 page_header()の中でglobal指定で、エラーがなくなりました。 ご教授ありがとうございます。
yambejp

2021/04/01 06:49

globalを使うのはあくまでもテストだけにしてください。 本番環境でglobalは流石にありえない運用です
creator.M

2021/04/01 07:22

ありがとうございます。 気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問