2014-10-14 2 views
0

Я пытался реализовать PDO с функциями prepare(), bindParam() и execute(), чтобы разрешить создание запроса из данных, введенных пользователем.php pdo query не работает

Я хотел отобразить список книг, а затем разрешить пользователю фильтровать список, а затем просмотреть новый список и полный список.

Когда я ввожу критерии в форму для поиска, ничего не происходит. Что я не замечаю?

здесь код

<?php 
     $pageTitle = "Book List"; 
     $pageHeading = "Book List"; 
     include_once ('header.php'); 
     include_once('databaseConnection.php'); 


     if(isset($_POST['txtSearchBookTitle'])) { 
      $db = new DatabaseConnection(); 
      $db = $db->db_connection; 
      $searchTitle = ($_POST['txtSearchBookTitle']); 
      $sql = $db->prepare("SELECT title FROM tblBook WHERE title LIKE ('%:searchTitle%') ORDER BY title"); 
      $sql->bindParam(':searchTitle', $searchTitle); 
      $sql->execute(); 
      $result = $sql->fetchAll(); 

      print_r($result); 

      foreach ($result as $row) { 
       echo "<li>" . " " . $row["title"]. " " . "</li>"; 
       } 
     } 

    ?> 
     <form name="searchBookTitle" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" > 
      <fieldset> 
       <legend>Search Books</legend> 
       <label for="txtSearchBookTitle">Search by Book Title</label> 
       <input type="text" name="txtSearchBookTitle" id="txtSearchBookTitle"> 
       <input type="submit" value="Submit"> 
      </fieldset> 
     </form> 

    <?php 
      include_once('getBooks.php'); 
      getBooks(); 
     include 'footer.php'; 
    ?> 
+0

Если вы попытаетесь запустить этот запрос в MySQL, вы получите обратно результаты, что вы хотите? – vaso123

+0

Я побежал этот SQL на базе данных Выбор названия FROM tblBook WHERE Название LIKE («%, то%») ORDER BY названием и возвращает результаты каждый раз Я хочу изменить «тем», чтобы myUserVariable. –

ответ

1

Вы должны подготовить входы таким образом:

$searchTitle = $_POST['txtSearchBookTitle']; 
$sql = $db->prepare("SELECT title FROM tblBook WHERE title LIKE :searchTitle ORDER BY title"); 
$sql->execute(array(':searchTitle' => '%' . $searchTitle . '%')); 

Или так:

$searchTitle = $_POST['txtSearchBookTitle']; 
$sql->bindParam(':searchTitle', "%{$searchTitle}%");  
+0

было это потому, что% нужно ускользнуть в инструкции? –

+0

@ user3608286 нет проблемы, просто отделяйте их, если '' '' встречается в вашем поисковом запросе, который будет обрабатывать экранирование по процентам. – Ghost

-1

Использование PDO::FETCH_ASSOC в вашем fetchAll .. это означает, что он вернет данные в виде массива

Так что это как этот

$result = $sql->fetchAll(PDO::FETCH_ASSOC); 
+1

. Не определяя режим выборки, вы получите 'FETCH_BOTH', который представляет собой массив с ключами в соответствии с столбцом и индекс столбца. – DarkBee

+0

Я думаю, что это было отклонено, потому что я считаю, что fetchAll() возвращает связанный массив по умолчанию –

+0

Спасибо, за информацию bro –