为什么我的LIKE搜索会返回所有内容?

时间:2013-02-06 21:59:40

标签: php mysql sql-like

我正在尝试在我的页面中进行图像搜索。

无论我搜索什么,它总是返回数据库中带有标签信息的所有图像。

我是这样做的,当有人在搜索框中输入文字时,页面会重定向到:

ob_start();

$input = abs($_GET['input']);
$query = "SELECT * FROM `photo`.`photo` WHERE `tags` LIKE '%$input'";
$result = mysql_query($query);
$data = mysql_fetch_array($result) or die (mysql_error());
$rows = mysql_num_rows($result);
$image = $data['image'];

if ($rows==0) {
    echo 'no results found';
}  else {
    $jpgimage = imagecreatefromstring($image);

    $image_width = imagesx($jpgimage);
    $image_height = imagesy($jpgimage);

    $new_size = ($image_width + $image_height)/($image_width*($image_height/45));
    $new_width = $image_width * $new_size;
    $new_height = $image_height * $new_size;

    $new_image = imagecreatetruecolor($new_width, $new_height);

    imagecopyresized($new_image, $jpgimage, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
    $imagearray = imagejpeg($new_image, null);
    header('Content-type: image/jpeg');

    echo $imagearray;
}

照片存储为BLOBS,所以在这里我将它们变成jpegs并调整它们的大小。

这大部分只是重新调整图像大小,但我不知道为什么我的mysql查询行中的LIKE部分无效。它总是给我带有标签的所有图像。

3 个答案:

答案 0 :(得分:2)

我怀疑$ input是空的。如果你的变量$ input为null或空字符串,它将创建一个where子句:

 SELECT * FROM `photo`.`photo` WHERE `tags` LIKE '%'

这会将通配符'%'与所有内容相匹配。

答案 1 :(得分:1)

我看到的一个问题是第一行的abs。如果您对文本字符串执行abs,则会得到零。

答案 2 :(得分:0)

您使用$input = mysql_real_escape_string($_GET['input'])代码来获得更安全的代码。 在您的案例中无需使用abs()函数。