поиск с использованием pdo, mysql и php - PullRequest
1 голос
/ 27 июля 2010

Я пробую свои силы с PDO и хотел бы знать, является ли следующий код правильным для поиска по ключевым словам, поскольку он дает мне ошибку: mysql_real_escape_string(): [2002] A connection attempt failed because connected host has failed to respond.

php класс:

public function searchQuotes() 
        {
            $search = mysql_real_escape_string($_POST['search']);

            $sql = "SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE '% :search %' ORDER BY idQuotes DESC";


                  try {

                      $query = $this->_db->prepare($sql);
                      $query->bindParam(':search', $search, PDO::PARAM_STR);
                      $query->execute();

                      if(!$query->rowCount()==0)
                      {
                               while($row = $query->fetch())
                        {
                            echo $this->formatSearch($row);
                        }


                      }
                      else
                         {
                            echo "No results found!";
                         }
                      $query->closeCursor();
                    }
                  catch (Exception $ex){

                        echo "Something went wrong " . $ex;
                    }
        }

        public function formatSearch($row) 
        {
            $cQuote =  highlightWords(htmlspecialchars($row['cQuotes']), $search);

            return "<p id=\"s_arabic\">" . $this->h($row['cArabic']) . "</p><br />"
            . "<p id=\"s_quotes\"><q>&nbsp;" . $cQuote . "&nbsp;</q></p><br />"
            . "<p id=\"s_author\"><b>-</b>&nbsp;" . $this->h($row['vAuthor']) . "</p><br />"
            . "<p id=\"s_reference\"><span class=\"source\">Source:</span> " . $this->h($row['vReference']) . "</p>"; 
        }

страница php:

if (isset($_POST['search'])) 
    $quotes->searchQuotes();

else
   $quotes->displayQuotes();

displayQuotes () отображает кавычки в порядке, так что я предполагаю, что нет ничего плохого в самом соединении.

Ответы [ 2 ]

3 голосов
/ 27 июля 2010

При использовании PDO и обязательных параметров / подготовленных операторов вам не нужно экранировать строки.Как вы настроили, PDO должен автоматически его избежать.

Поскольку вы используете PDO, вы не используете драйвер mysql_connect и, следовательно, вы не можете использовать функцию real_escape_string, так как она требует правильного соединения с сервером mysql, используя mysql_connect.

EDIT:

Не уверен насчет этого оператора if, но это может быть проблематично:

 if($query->rowCount()>0)

Было бы лучше использовать imo.Это может или не может быть проблемой.Другая проблема заключается в том, что вы должны проверить информацию об ошибке и предупредить себя, если есть какая-либо ошибка.

1 голос
/ 27 июля 2010

Вам не нужно использовать mysql_real_escape_string (), если вы используете подготовленные операторы PDO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...