从php使用for循环的mysql搜索

时间:2011-02-21 07:11:02

标签: php

我是初学者。但是我用php mysql练习了好几天,我正在尝试使用for循环从mysql服务器中逐个搜索一个爆炸的字符串。 直到现在我没有结果。 我正在给我的代码,

<?php
// Example 1
 $var = @$_GET['s'] ;

$limit=500;


echo "  ";

echo "$var";

echo "  ";

 $trimmed_array = explode(" ", $var);


echo "$trimmed_array[0]"; // piece1

echo "   ";
$count= count($trimmed_array);
echo $count;

for($j=0;$j<$count;$j++)
{
e    cho "$trimmed_array[$j]";;
echo "  ";
}

echo "   ";




for($i=0; $i<$count ; $i++){
                 $query = "select * from book where name like \"%$trimmed_array[$i]%\" order by name";

         $numresults=mysql_query($query);
         $numrows =mysql_num_rows($numresults);

 if ($numrows == 0)
  {
  echo "<h4>Results</h4>";
  echo "<p>Sorry, your search: &quot;" . $trimmed_array[i] . "&quot; returned zero results</p>";
  }


  if (empty($s)) {
  $s=0;
  }


  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");




echo "<p>You searched for: &quot;" . $var . "&quot;</p>";





echo "Results<br /><br />";


$count=1;



  while ($row= mysql_fetch_array($result)) {
  $name = $row["name"];
  $publisher=$row["publisher"];
  $total=$row["total"];
  $issued=$row["issued"];
  $available=$row["available"];
  $category=$row["category"];

  echo "<table border='1'><tr><td>$count)</td><td>$name&nbsp;</td><td>$publisher&nbsp;</td><td>$total&nbsp;</td><td>$issued&nbsp;</td><td>$available&nbsp;</td><td>$category&nbsp;</td></tr></table>" ;
  $count++ ;
  }
   }

?>

3 个答案:

答案 0 :(得分:1)

在您的情况下,您对阵列中的每个记录($trimmed_array)执行新选择。那不是很好。 当你只创建一个选择时会更好... 例如:

// you need 1=1 for example when $i<count is false...
$baseQuery = "select * from book where 1=1";
$query = $baseQuery;

for($i=0; $i<$count ; $i++){
    $query .= " OR name like ?";
}
// do your ordering:
$query.= " order by name";

但这是什么“?”意思? - &GT;你知道sql-injection是什么意思吗?有人可以很容易地在这个数组中放入一些信息,可以提供有关你的数据库的任何信息..因此你必须逃避每个用户输入...

我喜欢php5中的mysqli包。看这个例子:

$query = "SELECT `id` FROM employees WHERE `name`=?";

// Setup parameter to be bound into query
$name = "Joey";

// Get instance of statement
$stmt = $mysqli->stmt_init();

// Prepare Query
if($stmt->prepare($query)){

  // Bind Parameters [s for string]
  $stmt->bind_param("s",$name);

  // Execute statement
  $stmt->execute();

  // Bind result variables
  $stmt->bind_result($employee_id);

  // Fetch Value
  $stmt->fetch();

  // Echo results
  echo "$name has an ID of $employee_id";

  // Close Statement
  $stmt->close();
}

答案 1 :(得分:0)

第25行有错误

e cho "$trimmed_array[$j]";;

应该是 echo "$trimmed_array[$j]";

此外,您似乎正在使用$GET_[]变量,这些变量通过url字符串传递,不允许使用空格。在第15行,您将使用explode(" ", $var);

拆分数组

如果您还没有,我也会敦促您研究清理数据库查询。

答案 2 :(得分:0)

该死的,你的代码真的非常疯狂。这里举例说明如何使用它:

<?php
   $var = $_GET['s'];
   $exp = explode(" ",$var);
   $total = count($exp) - 1;
   for($i = 0; $i <= $total; $i++) {
      echo "Search for: " . $exp[$i] ."\n";
      $sql = mysql_query("SELECT * FROM `book` WHERE `name` LIKE '%" . mysql_real_escape_string($exp[$i]) ."%'") or die(mysql_error());
      if (mysql_fetch_num($sql) != 0) {
         // Somthing found
      }
   }
?>