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

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

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

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

PHP

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

Q&A

解決済

2回答

2402閲覧

テーブルに保存されたデータを変更するページを作成中にエラーメッセージが発生しました。

rozeo

総合スコア14

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/08/03 07:09

###前提・実現したいこと
PHPでデータを保存し更新するシステムを作っています。
テーブルに保存されたデータを変更するページを作成中にエラーメッセージが発生しました。

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

Fatal error: Call to undefined method PDOStatement::bind_param() in C:\pleiades\xampp\htdocs\hoge\hoge.php on line 35

###該当のソースコード

<?php define('DB_DATABASE', 'hoge'); define('DB_USERNAME', 'hoge'); define('DB_PASSWORD', 'hoge'); define('PDO_DSN', 'mysql:dbhost=hoge;dbname=' . DB_DATABASE); //接続 try{ $db = new PDO(PDO_DSN, DB_USERNAME,DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ echo $e->getMessage(); exit; } if(empty($_POST)) { echo "<a href='update1.php'>list4.php</a>←こちらのページからどうぞ"; exit(); }else{ if (!isset($_POST["no"]) || !is_numeric($_POST["no"]) ){ echo "IDエラー"; exit(); }else{ //プリペアドステートメント $stmt = $db->prepare("SELECT * FROM hogehoge WHERE no=?"); if ($stmt) { //プレースホルダへ実際の値を設定する $stmt->bind_param("i",$no); $no = $_POST["no"]; //クエリ実行 $stmt->execute(); //結果変数のバインド $stmt->bind_result($no,$name,$password); // 値の取得 $stmt->fetch(); //ステートメント切断 $stmt->close(); }else{ echo $mysqli->errno . $mysqli->error; } } } // データベース切断 $mysqli->close(); ?> <!DOCTYPE html> <html> <head> <title>変更画面</title> </head> <body> <h1>変更画面</h1> <p>名前を変更して下さい。</p> <form action="update3.php" method="post"> <input type="hidden" name="no" value="<?=$no?>"> <input type="text" name="name" value="<?=htmlspecialchars($name, ENT_QUOTES, 'UTF-8')?>"> <input type="text" name="password" value="<?=htmlspecialchars($password, ENT_QUOTES, 'UTF-8')?>"> <input type="submit" value="変更する"> </form>

###試したこと
エラーメッセージの翻訳やマニュアルは読みました。35行目の記述ミスや$stmtの定義ミスなどを疑ったのですが、特に問題なさそうでした。

###補足情報(言語/FW/ツール等のバージョンなど)
http://noumenon-th.net/programming/2016/01/20/mysql-3/
こちらのサイトを参考にさせていただきました。

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

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

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

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

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

guest

回答2

0

PDOとmysqliがまざっていませんか?

投稿2017/08/03 07:20

yambejp

総合スコア114572

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

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

rozeo

2017/08/03 07:25

ご指摘ありがとうございます。
guest

0

ベストアンサー

先ずはエラー内容を素直に読み、次にリファレンスを参照するのが近道です。

エラー内容は

Call to undefined method PDOStatement::bind_param()

ですから、PDOStatementクラスにはbind_param()というメソッドは無い(存在しないメソッドを呼ぼうとしている)というエラーです。

PDOStatementのマニュアルを読んでみると
http://php.net/manual/ja/class.pdostatement.php
bind_paramというメソッドは存在しません。(bindParamは存在する)

*参考にされたページではPDOを使っていないため、一部分だけをPDOにしても、正常に動作しませんし、35行目のメソッド名を修正しても、その後も後の部分で同様のエラーが発生すると思われます。

PDOを使うのは良いことだと思いますので、最初からPDOで書かれたサンプルを参考に組みなおすことをお勧めします。

投稿2017/08/03 07:21

tanat

総合スコア18709

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

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

rozeo

2017/08/03 07:25

PDOとmysqliは別物なのですね、まずはそこから学びなおそうと思います。今後の指針も示してくださったので、ベストアンサーにさせていただきました。
tanat

2017/08/03 07:34

PDOとmsqliの違いはteratailでも質問があったと思うので参照されると良いかと思います。 例) https://teratail.com/questions/40450 個人的には、これから学習されるという事であれば、まずはPDOを使えるようになることをお勧めします。
rozeo

2017/08/03 07:38

PDOのほうが汎用性がありそうですね。ありがとうございます。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問