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

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

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

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

Q&A

解決済

2回答

6756閲覧

PHP データベース接続でparameter error

a-_.

総合スコア133

PHP

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

0グッド

0クリップ

投稿2016/09/25 09:58

編集2016/09/26 02:36

PHPのクラスで各メソッド毎にファイルを作成してデータベースにアクセスし、そこから出力するという処理を行いたいんですが
⓵mysqli_select_db() expects parameter 1 to be mysqli, string given
⓶mysqli_query() expects at least 2 parameters, 1 given
⓷mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given
と3つエラー表示されました

各mysqli関数でデータベースへ接続する為の要素が一部不足しているというのは理解できているんですが、その定義がどのようなものなのかがよく分かりません

データベースへアクセスする為のクラス(XXX.php)を作成し、require_once("XXX.php");でPHPの処理をする際にXXX.phpへ接続するようにしてみたんですが、書き方が違うようで作業が止まってしまっています

また、$X_obj = new~でオブジェクトを生成する際に「このオブジェクトはこのデータベースへ接続する」という定義をすれば成功するのではと思ったのですが、これも書き方が違うようでわけが分からなくなりました

PHP

1//メインのクラス 2<?php 3 require_once("XXX.php"); 4 5 if (isset($_POST['name'], $_POST['comment'], $_POST['bbs']) && $_POST['bbs'] == "post") { 6 require("XXX1.php"); 7 $p_obj = new Post("mysqli:host=XXX;XXX", "XXX", "XXX"); 8 $p_obj->name = $_POST['name']; 9 $p_obj->comment = $_POST['comment']; 10 $p_obj->post(); 11 } elseif (isset($_POST['bbs']) && $_POST['bbs'] == "update") { 12 require("XXX2.php"); 13 $u_obj = new Update("mysqli:host=XXX;XXX", "XXX", "XXX"); 14 $u_obj->name = $_POST['name']; 15 $u_obj->comment = $_POST['comment']; 16 $u_obj->chk = $_POST['chk']; 17 $u_obj->update(); 18 } elseif (isset($_POST['bbs']) && $_POST['bbs'] == "delete") { 19 require("XXX3.php"); 20 $d_obj = new Delete("mysqli:host=XXX;XXX", "XXX", "XXX"); 21 $d_obj->chk = $_POST['chk']; 22 $d_obj->delete(); 23 } 24 25 require("XXX4.php"); 26 $l_obj = new List_table; 27 $data = $l_obj->list(); 28 echo strlen($data); 29?>

追記
下記コードがデータベース接続のソースです

PHP

1<?php 2 class Db { 3 public $class; 4 public function connect() { 5 $this->class = mysqli_connect("XXX", "XXX", "XXX", "XXX") or die("NG"); 6 mysqli_select_db("XXX", $this->class); 7 } 8 9 public function close() { 10 mysqli_close($this->class); 11 } 12 } 13?>

下記コードは、MySQLI関数を使用しないで試しにオブジェクト指向型で改めてコーディングしてみたのですが、こちらも接続できませんでした
今回のコーディングで何が足りないのでしょうか

PHP

1<?php 2 class Db { 3 public $class; 4 public function connect() { 5 $dsn = 'mysql:dbname = XXX; host = XXX; charset = XXX'; 6 $user = 'XXX'; 7 $password = 'XXX'; 8 try { 9 $dbh = new PDO($dsn, $user, $password); 10 } catch (PDOException $e) { 11 die('Connect Error: ' . $e->getCode()); 12 } 13 } 14 15 public function close() { 16 mysqli_close($this->class); 17 } 18 } 19?>

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

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

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

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

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

popobot

2016/09/25 20:52

実際にエラーが起きている関数のコードがないので判断できません...。それぞれ引数の数がおかしいといっているのでマニュアルを参照したらどうでしょうか。 http://php.net/manual/ja/mysqli.select-db.php など
CHERRY

2016/09/25 22:35

「データベースへアクセスする為のクラス(XXX.php)」で、エラーが発生していると思いますので、この内容を質問に追記してください。
guest

回答2

0

ベストアンサー

このコードはmysql系の関数で作っていたものをmysqli系の関数に変更したように見受けられます(違っていたらすみません)
以下はそれを踏まえての回答になります。

【⓵について】

「引数の1つ目はmysqliでなければならない」というエラーです。
mysql系の関数とは引数の順番が逆で、mysqli系での関数はDB接続のリソースは引数の1つ目に指定します。

【⓶について】

「引数は2つ以上必要だが1つしか渡されていない」というエラーです。
該当箇所のコードがないので推測になりますが、mysql系の関数とは違い、mysqli系の関数は引数のDB接続リソースを省略することができません

【⓷について】

該当箇所のコードがないので推測になりますが、mysqli_query()がエラーで結果を取得出来なかったのに、そのまま取り出そうとしからでしょう。

PDOに関しては私も勉強中ですので、回答しかねます。
ご了承下さい。

投稿2016/09/26 02:58

KaedeKazane

総合スコア408

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

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

a-_.

2016/09/26 07:51

ご回答ありがとうございます ⓵については質問文のソースもそうですが、1つ目にmysqliを書いているのに何故処理されないのでしょうか ⓶についてはquery処理をするのは把握していますが、何に対してのparametersを指しているのかが分かりません
KaedeKazane

2016/09/26 08:06 編集

>1つ目にmysqliを書いているのに何故処理されないのでしょうか mysqli_select_db("XXX", $this->class); どう見ても2つ目に指定されています。 >何に対してのparametersを指しているのかが分かりません mysqli_query()でのエラーなんですから当然mysqli_query()に対する引数です。 何を渡すかは回答に書いてある通りです 書いてあることも確認しない、わからないのであればこれ以上言えることは何も無いので、あとはご自身でマニュアルをご覧ください http://php.net/manual/ja/mysqli.select-db.php http://php.net/manual/ja/mysqli.query.php
guest

0

PDOに関してはsetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
を指定してください

PHP

1class Db { 2 function connect() { 3 $dsn = 'mysql:dbname = XXX; host = XXX; charset = XXX'; 4 $user = 'XXX'; 5 $password = 'XXX'; 6 try { 7 $dbh = new PDO($dsn, $user, $password); 8 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //これをしないと文法エラーが拾えない 9 } catch (PDOException $e) { 10 die($e->getMessage()); 11 } 12 } 13}

ちなみに「接続できない」というのはPDOのモジュール自体がインストールされてない
可能性もあります。phpinfo()を実行して、PDOセクションがあるかどうか確認する必要があります

投稿2016/09/26 03:13

yambejp

総合スコア114572

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問