初学MySQL数据库搜索 - 没有得到结果

时间:2013-01-27 13:01:36

标签: php mysql

我第一次尝试使用搜索引擎: 我有一个名为“global”的数据库和一个名为“mpl”的表,其中包含11列(命名:Customer,Part No,Descripton,Country of Origin和其他几个),其中包含多行部分。 我的目标是使用下面的代码 - 是为用户输入搜索字段的部件号显示描述和原产国。

形式:

<form action="search.php" method="post"> 
<input type="text" name="find" /><br /> 
<input type="submit" value="Search" /> </form>

PHP:     

$host = "localhost"; 
$dbuser = "root"; 
$dbpass = " "; 
$db = "global"; 

$con = mysql_connect($host, $dbuser, $dbpass);
    if(!$con){ die(mysql_error());
    } 
$select = mysql_select_db($db, $con);
    if(!$select){ die(mysql_error()); 
    } 
$item = $_REQUEST['find'];  
$data = mysql_query("SELECT * FROM mpl WHERE 'Part No' ='".$item."'"); 
while($row = mysql_fetch_array($data)){ 
        echo $row['Description']. "<br>";
        echo $row['Country Of Origin']. "<br><p>"; 
 } 

 ?>

有人能告诉我我做错了什么吗?一旦我输入任何形式'find' - 我得不到任何结果。如果我使用LIKE而不是“=”运行搜索而没有值 - 它会显示一堆描述和原产国 - 这意味着我已正确连接到我的数据库。这让我疯了。我觉得我已经搞砸了mysql_query()部分 - 但是我无法弄清楚哪个部分。

6 个答案:

答案 0 :(得分:1)

您使用错误的字符来转义查询中的“部件号”列名称。用反引号(`)逃脱它们,应该没问题。

$data = mysql_query("SELECT * FROM mpl WHERE `Part No` ='".$item."'");

此外,您应该验证用户的查询以防止SQL注入。

答案 1 :(得分:0)

如果你改变了怎么办?

$item = $_REQUEST['find'];  

$item = $_POST['find'];  

还有一些函数如mysql_select_db()已被弃用并将被删除。请参阅:
http://php.net/manual/en/function.mysql-select-db.php

答案 2 :(得分:0)

尝试更换此药水。

$item = $_REQUEST['find'];   $data = mysql_query("SELECT * FROM mpl WHERE 'Part No' ='".$item."'");

到这个

$item = $_POST['find'];  
$data = mysql_query("SELECT * FROM mpl WHERE Part No ='$item'");

答案 3 :(得分:0)

在您的请求中执行类似的操作,删除任何可能的空格,并将其标准化为大写字母以供选择字符串使用。

$item = strtoupper(trim($_REQUEST['find']));  

在SQL中执行此操作:也要进行规范化。

$data = mysql_query("SELECT * FROM mpl WHERE UPPER(TRIM('Part No')) ='".$item."'"); 

你基本上没有得到你的where子句

的完全匹配

答案 4 :(得分:0)

这里的很多人已经在您的代码中指出了可能的和实际的错误,但这是组合的解决方案。首先,我将您的代码转换为mysqli,这是连接到mySQL数据库的正确方法。您的连接方式已过时,不建议使用。其次我添加了一些代码来阻止sql注入。第三,我在你的查询中将'Part No'更改为“Part No``(忽略第二个回拨号)。

<?php

$mysqli = new mysqli('localhost', 'root', DB_PASSWORD, 'global');

/* check connection */
if ($mysqli->connect_error)
  die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);

/* escape string from sql injection */
$item = $mysqli->real_escape_string($_POST['find']);

/* query database */
$result = $mysqli->query("SELECT * FROM `mpl` WHERE `Part No` = '".$item."'");
while ($col = $result->fetch_array(MYSQLI_ASSOC))
  echo '<p>' . $col['Description'] . '<br />' . $col['Country Of Origin'] . '</p>';
$result->close();

/* don't forget to close the connection */
$mysqli->close();

?>

答案 5 :(得分:0)

首先,我同意昆汀的观点;你应该使用像PDO或Mysqli这样的数据库API。其次,看起来人们可以通过零件编号或描述来搜索零件。假设部件号是数字且描述是字符串...检查输入的类型并相应地运行查询。

$host = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$db = "global";

// Establish a database connection and select one.
// Try using one of the database API's.

// Then compose your sql by checking for the type of input from the form.
// Since your request method is a POST, then just look in the `_POST` superglobal.
$item = $_POST['find'];

if( is_numeric($item) ){
   $sql = "SELECT * FROM mpl WHERE 'Part No' = {$item}";
}else{
   $sql = "SELECT * FROM mpl WHERE 'Description' LIKE '%{$item}%'";
}

// Then perform the query.