こんにちは。
現在画像投稿サイトを作成しております。
usernameまたはniku_nameでの検索フォームを作ったのですが、検索すると、以下のエラーメッセージが発生してしまいます。その原因が分からず困っています。
###発生している問題・エラーメッセージ
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'こう'%' at line 11 in /home/users/2/velvet.jp-red-amami-9732/web/application/core/DbRepository.php:19 Stack trace: #0 /home/users/2/velvet.jp-red-amami-9732/web/application/core/DbRepository.php(19): PDOStatement->execute(Array) #1 /home/users/2/velvet.jp-red-amami-9732/web/application/core/DbRepository.php(31): DbRepository->execute('SELECT\r\n\t ...', Array) #2 /home/users/2/velvet.jp-red-amami-9732/web/application/models/UserRepository.php(56): DbRepository->fetchAll('SELECT\r\n\t ...', Array) #3 /home/users/2/velvet.jp-red-amami-9732/web/application/controllers/AccountController.php(273): UserRepository->searchForUser('\xE3\x81\x93\xE3\x81\x86') #4 /home/users/2/velvet.jp-red-amami-9732/web/application/core/Controller.php(40): AccountController->searchAction(Array) #5 /home/users/2 in /home/users/2/velvet.jp-red-amami-9732/web/application/core/DbRepository.php on line 19
###該当のソースコード
こちらが検索処理です。
public function searchAction($params) { $id = $this->request->getGet('search_value'); $user = $this->session->get('user'); $profile = $this->db_manager->get('Profile')->getById($user['id']); $searchs = $this->db_manager->get('User')->searchForUser($id); $smarty = new Smarty(); $smarty->assign("session",$this->session); $smarty->assign("_content",$this->content); $smarty->assign("base_url",$this->request->getBaseUrl()); $smarty->assign("errors",$errors); $smarty->assign("user",$user); $smarth->assign("profile",$profile); $smarty->assign("searchs",$searchs); $smarty->display(VIEW_DIR . '/account/search.php'); }
こちらがSQL文になります。
<?php class UserRepository extends DbRepository { public function insert($name,$email = null,$password = null) { $password = $this->hashPassword($password); $now = new DateTime(); $sql = "INSERT INTO user(name,email,password,create_date,update_date) VALUES(:name,:email,:password,:create_date,:update_date)"; $stmt = $this->execute($sql,array(':name' => $name , ':email' => $email , ':password'=> $password , ':create_date' => $now->format('Y-m-d H:i:s'),':update_date' => $now->format('Y-m-d H:i:s'),)); return $this->con->lastInsertId(); } public function hashPassword($password) { return sha1($password . '11625Kouta'); } public function getById($id) { $sql = "SELECT * FROM user WHERE id = :id"; return $this->fetch($sql,array(':id' => $id)); } public function fetchByUserName($name) { $sql = "SELECT * FROM user WHERE name = :name"; return $this->fetch($sql,array(':name' => $name)); } public function fetchByUserEmail($email) { $sql = "SELECT * FROM user WHERE email = :email"; return $this->fetch($sql,array(':email' => $email)); } public function searchForUser($search_value) { $sql = "SELECT U.id AS user_id, U.name AS name, P.user_id AS profile_id, P.nick_name FROM user U INNER JOIN profile P ON U.id = P.user_id WHERE U.name = :name OR P.nick_name LIKE %:nick_name%"; return $this->fetchAll($sql,array(':name' => $search_value, ':nick_name' => $search_value)); }
こちらがViewです。
{include file="`$smarty.const.VIEW_DIR`/layout.php"} <title>検索 結果</title> <div style="text-align:center" id="statuses"> {foreach from=$searchs item=$search} <div class="image_file"> <div class="user"> <img src="/uploads/{$profile.image_file}" width="100px" class="effect"/> {UtilCommon::escape($profile.nick_name)} </div> <div class="user_id">ユーザID: <strong>{UtilCommon::escape($user.name)}</strong> <p>フォロー:</p> {if count((array)$follows) > 0} <ul> {foreach from=$follows item=follow} <li> <a href="{$base_url}/user/{UtilCommon::escape($follow['name'])}"> {UtilCommon::escape($follow['name'])} </a> </li> {/foreach} </ul> {/if} </div> </div> {/foreach} </div>
よろしくおねがいいたします。
回答1件