1

在这里编辑别人的代码,所以我不能更改数据库中调用的字段title或更改为 MySQLi 等:/

该代码可以毫无问题地连接到数据库,但始终得出零结果。

$strSQL = "SELECT * FROM newproducts WHERE 'title' LIKE ('%$q%')";
$sql = mysql_query($strSQL) or die(mysql_error());
$num_rows = mysql_num_rows($sql);

if ( $q == '' ) {
    echo '<p class="black-text">Please provide a search term.</p>';
}

else if ( $num_rows <= 0 ) {
    echo '<p class="black-text">Your search for <b>'.$q.'</b> returned <b>0</b> results.</p>';
}

else { 

    echo '<p class="black-text">Your search for <b>'.$q.'</b> returned <b>'.$num_rows.'</b> result(s).<br/><br/>';  
    while($row = mysql_fetch_assoc($sql)) {
        echo '- '.$row['title'].' <a href="'.$row['link'].'.html" class="search-link">[Read more]</a><br/>';
    }
    echo '</p>';
}

会不会是个案问题?我试过搜索较低和较高的字符串,但结果仍然为零。

4

1 回答 1

6

在 MySQL 中,单引号表示字符串:

SELECT * FROM newproducts WHERE 'title' LIKE ('%$q%')

应该

SELECT * FROM newproducts WHERE title LIKE ('%$q%')

此外,您正在if ($q == '')执行查询之后进行测试 - 您可能希望在此之前执行此操作 - 但这不会导致您的问题。

最后,通过使用潜在不安全的用户输入,您面临 SQL 注入的风险 - 但我不会深入研究,因为它与您的问题没有直接关系。如今,大多数 PHP 开发人员都在使用准备好的语句来使他们的查询更安全(并且因为运行查询的旧样式将被弃用)。

于 2012-11-07T15:01:26.643 回答