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テーブルで見つかった場合、結果は表示され、エラーはありません。

ただし、キーワードが見つからない場合、Webブラウザは以下のエラーを生成します。

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

これの別の代替手段は、を使用すること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 に答える
0

http://jsfiddle.net/GsNmw/1/pagination_mechanism_and_buttons_variables_for_Search.phpにあるものに変更します

$limitを作成して変更する直前に、次のブロックを追加しました$limit

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

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

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

これにより、負の制限が回避されるため、エラーが回避されます。

于 2012-09-12T05:49:12.413 に答える