MySQL select работает в phpMyAdmin, но мой PHP не возвращает строк с одним и тем же вызовом - PullRequest
1 голос
/ 25 июля 2010

Вот мой код

<?php
session_start();

include('config.php');
if(isset($_GET['search_word']))
{
    // echo $_GET['search_word'] . '<br />'; // debugging
    $search_word = $_GET['search_word'];
    $search_word = mysql_escape_string($search_word);
    $search_word_fix = str_replace(" ","%",$search_word);

    $query = "SELECT * FROM article WHERE article_title LIKE '%" . $search_word . "%' AND article_live = '1' ORDER BY article_id DESC";
    // echo $query . '<br />'; // debugging

    $sql = mysql_query($query);
    $count = mysql_num_rows($sql);
    // echo $count . '<br />'; // debugging
    // echo mysql_num_rows($sql) . '<br />'; // debugging
    if($count > 0)
    {
        while($row=mysql_fetch_array($sql))
        {
            $msg=$row['article_title'];
            $bold_word='<b>'.$search_word.'</b>';
            $final_msg = str_ireplace($search_word, $bold_word, $msg);

            echo $final_msg; 
        }
    }
    else
    {
        echo "No Results";
    }
}?>

Может кто-нибудь увидеть проблему с этим? Я не могу понять, что не работает с этим сценарием, и я некоторое время смотрел на него. Он никогда не попадает в цикл WHILE только «Нет результатов», и счетчик возвращается, когда я раскомментирую свою отладку.

1 Ответ

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

Счетчик, возвращающий пустое значение, означает, что ваш запрос по какой-то причине не удался.

  • Правильно ли вы подключаетесь к БД? Попробуйте использовать mysql_error () сразу после запроса:

    $error_msg = mysql_error();
    
  • Используйте mysql_real_escape_string () вместо mysql_escape_string () - он учитывает набор символов, чтобы у вас не возникало проблем с UTF8

Если вы используете это публично, вы можете узнать об использовании связываний, чтобы исключить возможность внедрения SQL через такую ​​библиотеку, как PDO .

Вот довольно хорошее руководство / введение в PDO, объясняющее, почему это важно!

...