0

我的网站上有一个搜索字段功能,PHP 代码如下:

if(isset($_GET['search_ti']) && $_GET['search_ti'] != "")
{
    $search_ti = preg_replace('#[^a-z 0-9?!-]#i', '', $_GET['search_ti']);

    $sqlCommand = "
    SELECT * FROM page WHERE title LIKE '%$search_ti%' OR body LIKE '%$search_ti%'
    ";

    $result = $mysqli->query($sqlCommand) or die(mysql_error());
    ...

URL 变量search_ti是我从 URL 中得到的搜索关键字。例如:

searchResult.php?search_ti=home

如果在我的 MySQL 表中找到关键字,则结果显示并且没有错误。

但如果找不到关键字,网络浏览器会生成以下错误:

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 '-4,4' at line 1

我的代码有什么问题?

附加信息:

完整的 PHP 代码:http: //jsfiddle.net/eQSZc/

关键词:家。该错误仅在我的表中未找到该关键字时显示。

4

2 回答 2

0

将您更改pagination_mechanism_and_buttons_variables_for_Search.phphttp://jsfiddle.net/GsNmw/1/中的那个

$limit在您构造和更改之前,我已经添加了以下块$limit

$start = ($pn - 1) * $itemsPerPage;

if($start<0){
    $start = 0;
}

$limit = 'LIMIT ' .$start .',' .$itemsPerPage;

这避免了负限制,从而避免了你的错误。

于 2012-09-12T05:49:12.413 回答
0

另一种选择是使用PDO.

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$keyword = '%' . search_ti . '%';
$stmt = $dbh->prepare("SELECT * 
                       FROM page 
                       WHERE title LIKE ? OR 
                             body LIKE ?");
$stmt->bindParam(1, $name);
if ($stmt->execute())
{
  while ($row = $stmt->fetch()) 
  {
    print_r($row);
  }
}
?>

这将允许您选择带单引号的记录。

于 2012-09-12T05:16:51.993 回答