はじめまして。
データベースの更新をして、結果を表示させる方法が分かりません。
現状、call to a member function prepare() on a non-object in ........on line 21と、エラーが表示されています。
ご教授よろしくお願いします。
<?php
require_once('index.php');
$error = '';
if (@$_POST['submit']) {
$name = (string)filter_input(INPUT_POST, 'name');
$comment = (string)filter_input(INPUT_POST, 'comment');
$price = (string)filter_input(INPUT_POST, 'price');
$code = (string)filter_input(INPUT_POST, 'code');
if (!$name) $error .= '商品名がありません。<br>';
if (!$comment) $error .= '商品説明がありません。<br>';
if (!$price) $error .= '価格がありません。<br>';
if (preg_match('/\D/', $price)) $error .= '価格が不正です。<br>';
if (!$error) {
require_once('index.php');
$sql = 'UPDATE goods SET name=:name, comment=:comment, price=:price WHERE code=:code';
$stmt = $pdo -> prepare($sql);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':name', $comment, PDO::PARAM_STR);
$stmt->bindParam(':name', $price, PDO::PARAM_INT);
$stmt->bindValue(':value', $code, PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
exit(); }
} else {
$code = $_GET['code'];
$sql ="SELECT * FROM goods` WHERE code=$code";
$smt = $dbh->prepare($sql);
//$sql->execute();
if (!$smt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
$row = $smt->fetch() ;
$name = $row['name'];
$comment = $row['comment'];
$price = $row['price'];
}
require 't_edit.php';
?>
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
もしされていないなら、PDOを設定する際にエラーを拾えるようにしてみてください
<?php
$dsn = 'mysql:host=localhost; dbname=xxxx';
$user = 'xxxx'; $password = 'xxxx';
$dbh = new PDO($dsn, $user,$password);
$dbh ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//そのうえで、try節でsqlを発行し、エラーをcatchします
try{
$sql = "UPDATE goods SET name= ?, comment= ?, price= ? WHERE code= ?";
$stmt = $dbh -> prepare($sql);
$stmt->bindValue(1,$name, PDO::PARAM_STR);
$stmt->bindValue(2,$comment, PDO::PARAM_STR);
$stmt->bindValue(3,$price, PDO::PARAM_STR);
$stmt->bindValue(4,$code, PDO::PARAM_STR);
$stmt->execute();
}catch(PDOException $e){
die($e->getMessage());
}
?>
文法エラーでなければ、一点$userで指定しユーザーが、該当DBの更新権限を
もっているかどうか確認しておいた方がいいと思います。
No.1
- 回答日時:
フロー的に微妙
if (isset($_POST['submit'])) { //submitがポストされていたら
・・・・
if (!$error) { //エラーがなければ
$sql = 'UPDATE goods SET name=?, comment=?, price=? WHERE code=?';
アップデート処理
}
} //一回とじて
if (isset($_GET['code'])){ // codeがゲットされていたら
$sql =’SELECT * FROM goods WHERE code=?';
表示処理
}
の、流れでは?(前回も書いたような気がしますが・・・)
単なる転記ミスかもしれませんがbindParam(':name'が重複して指定してたり
SQL内のバッククォートが中途半端についていたりミスが散見されます。
凡ミスがあると本質的な質問・回答までたどり着かないので注意が必要
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
phpで変数を使ってcopyできない
-
ファイル名を変更してアップロ...
-
VBA で、スペースを含むファイ...
-
phpでショッピングカート機能を...
-
PHP等を用いて在庫数を表示・管...
-
MAMPでphpのモジュールSpreadsh...
-
Smartyのforeachのnameに変数を...
-
重複を防ぐ記述について教えて...
-
<input type="hidden" >で配列...
-
phpの掲示板で新しい順に表...
-
HTMLで前の画面に戻る時、入力...
-
大鏡「若き日の道長」の訳
-
PHP ボタンが押されたら処理を...
-
laravelを利用してコントロール...
-
RDFの名前空間の要素をxpathで...
-
phpでのボタン押下の活性・非活...
-
なぜ、unexpected T_VARIABLEに...
-
検索時の選択内容を保持する方法
-
header location が飛びません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
Flaskでサーバー立ち上げに関して
-
POSTの項目に追加
-
foreachがうまく動かない
-
PHP&MySQL fetchAll()でデータ...
-
PHPからHTMLへの変数の受け...
-
サブフォルダ内の全てのテキス...
-
ファイル名を変更してアップロ...
-
openCVのトラックバーについて
-
アップロードしたファイルの絶...
-
phpでショッピングカート機能を...
-
php+mysqlでの重複チェックにつ...
-
$_REQUEST とphpファイルでphp?...
-
PHP FTPサーバへの画像アップロ...
-
php ファイルアップロード サ...
-
$_REQUESTの意味を教えて下さい
-
重複を防ぐ記述について教えて...
-
name属性が全角の場合・・・
-
PHP MySql 画像を取得
おすすめ情報
有難う御座います。
書き直しました。更新部分です。
<?php
require_once('index.php');
$sql = "UPDATE goods SET name= ?, comment= ?, price= ? WHERE code= ?";
$stmt = $dbh -> prepare($sql);
$stmt->bindValue(1,$name, PDO::PARAM_STR);
$stmt->bindValue(2,$comment, PDO::PARAM_STR);
$stmt->bindValue(3,$price, PDO::PARAM_STR);
$stmt->bindValue(4,$code, PDO::PARAM_STR);
$stmt->execute();
?>
エラーは出ないものの、更新が反映されません。何故でしょうか。ご教授頂けると幸いです。
yambejp様
いつもありがとうございます。
ご教授頂いた通りにやってみましたが、エラーがでず、データベースの権限もあるようです。
他には何が考えられるのでしょうか?
$sql,$name,$comment,$price,$codeの中身を確認すると
object(PDOStatement)#3 (1) { ["queryString"]=> string(60) "UPDATE goods SET name= ?, comment= ?, price= ? WHERE code= ?" } string(3) "あ" string(3) "あ" string(2) "13" string(0) ""
となっております。本来ならば「?」に値が表示されて出るのでしょうか?
ご教授頂けると幸いです。