現在タイムライン掲示板を作成しており、実装が全て終えたのでリファクタリングをしています。
リファクタリングをする項目は以下です。
1.サインインユーザー情報取得
2.投稿情報登録処理
3.いいね件数
3.いいね済みかどうか
2までは無事終えたのですが、3.いいね件数をリファクタリングするとFatal error: Call to a member function prepare() on string in /Applications/XAMPP/xamppfiles/htdocs/batch48/LearnSNS_self/function.php
のエラーがfunction.phpの1サインインユーザー情報取得のリファクタリングに出ます。
他の類似エラーを参考に、文頭に
error_reporting(E_ALL);
ini_set('display_errors', '1');
を追記しましたがエラー表示は変わらぬままでした。
リファクタリングをしない場合だと、同じ場所にエラーが出ないのになぜでしょうか…
ご教示お願い致します。
timeline.php
1<?php 2error_reporting(E_ALL); 3ini_set('display_errors', '1'); 4 5session_start(); 6require('dbconnect2.php'); 7require('function.php'); 8 9// ユーザー登録(リファクタリングする前) 10// $sql = 'SELECT * FROM `users` WHERE `id`=?'; 11// $data = [$_SESSION['LearnSNS_self']['id']]; 12// $stmt = $dbh->prepare($sql); 13// $stmt->execute($data); 14// $signin_user = $stmt->fetch(PDO::FETCH_ASSOC); 15 16// ユーザー登録(リファクタリングした後) 17$signin_user = getUser($dbh,$_SESSION['LearnSNS_self']['id']); 18 19------ 20 21// ユーザーが投稿ボタンを押したとき 22if(!empty($_POST)){ 23 $feed = $_POST['feed']; 24 25 if($feed != ''){ 26 (リファクタリングする前) 27 // $sql = 'INSERT INTO `feeds` (`feed`, `user_id`, `created`) VALUES(?,?,NOW())'; 28 // $data = [$feed, $signin_user['id']]; 29 // $stmt = $dbh->prepare($sql); 30 // $stmt->execute($data); 31 (リファクタリングした後) 32 createFeed($dbh,$feed,$signin_user['id']); 33 34 header('location: timeline.php'); 35 exit(); 36 }else{ 37 $errors['feed'] = 'blank'; 38 } 39} 40------ 41// 何件いいねされているか確認(リファクタリングする前) 42 // $like_sql = 'SELECT COUNT(*)AS `like_cnt` FROM `likes` WHERE `feed_id`=?'; 43 // $like_data = [$record['id']]; 44 // $like_stmt = $dbh->prepare($like_sql); 45 // $like_stmt->execute($like_data); 46 // $like = $like_stmt->fetch(PDO::FETCH_ASSOC); 47 // $record['like_cnt'] = $like['like_cnt']; 48 (リファクタリングした後) 49 $record['like_cnt'] = countLike($dbh,$feed_id); 50
function.php
1<?php 2 3 4 5// サインユーザー情報取得 6function getUser($dbh, $id) { 7 $sql = 'SELECT * FROM `users` WHERE `id`=?'; 8 $data = [$id]; 9 $stmt = $dbh->prepare($sql);###←★エラーが出ていると言われる場所 10 $stmt->execute($data); 11 return $stmt->fetch(PDO::FETCH_ASSOC); 12} 13 14 15// // 投稿情報登録処理 16function createFeed($dbh,$feed,$user_id){ 17 $sql = 'INSERT INTO `feeds`(`feed`,`user_id`,`created`) VALUES(?,?,NOW())'; 18 $data = [$feed,$signin_user['id']]; 19 $stmt = $dbh->prepare($sql); 20 $stmt->execute($data); 21} 22 23// いいね件数 24$dbh = ""; 25$feed_id = ""; 26function countLike(){ 27 $sql = "SELECT COUNT(*)AS `like_cnt` FROM `likes` WHERE `feed_id`=?"; 28 $data = [$feed_id]; 29 $stmt = $dbh->prepare($sql); 30 $stmt->execute($data); 31 $result = $like_stmt->fetch(PDO::FETCH_ASSOC); 32 return $result['like_cnt']; 33} 34 35
回答3件
あなたの回答
tips
プレビュー