Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP实现数据库的MySQL查询_Php_Mysql_Sql - Fatal编程技术网

用PHP实现数据库的MySQL查询

用PHP实现数据库的MySQL查询,php,mysql,sql,Php,Mysql,Sql,所以我要做的是运行一个搜索查询。我希望用户能够通过在HTML表单的框中输入搜索词来搜索mysql中的图书数据库。然后,我希望根据用户输入的内容显示mysql数据。这很烦人,这在几周前奏效了,但现在不行了。每当运行脚本时,我都会收到以下消息: 警告:mysql_numrows()希望参数1是资源,布尔值在第52行的C:\xampp\htdocs\Shopping Cart 2.0\search.php中给出 警告:mysql_fetch_array()希望参数1是资源,布尔值在第67行的C:\xa

所以我要做的是运行一个搜索查询。我希望用户能够通过在HTML表单的框中输入搜索词来搜索mysql中的图书数据库。然后,我希望根据用户输入的内容显示mysql数据。这很烦人,这在几周前奏效了,但现在不行了。每当运行脚本时,我都会收到以下消息:

警告:mysql_numrows()希望参数1是资源,布尔值在第52行的C:\xampp\htdocs\Shopping Cart 2.0\search.php中给出

警告:mysql_fetch_array()希望参数1是资源,布尔值在第67行的C:\xampp\htdocs\Shopping Cart 2.0\search.php中给出

我尝试了一个错误,但它告诉我同样的事情。也许我放错地方了?无论如何,任何帮助都将不胜感激。谢谢

以下是引用的HTML表单:

<form action="search.php" method="GET">
<input type="text" name="query" alt="Search Books" value=" Search by ISBN, Author, or Title" 
maxlength="356" size="52" onfocus="if(this.value==this.defaultValue)this.value='';"     onblur="if(this.value=='')this.value=this.defaultValue;" />
<input type="submit" name="querybtn" value="Search Books"/>
 </form>

下面是php代码:

<?php
 $query= $_GET['query'];

$q1 = "(`Author(s)` LIKE '%" . $query . "%')";
$q2 = "(`Title` LIKE '%" . $query . "%')";
$q3 = "(`Price` LIKE '%" . $query . "%')"; 
$q4 = "(`Edition` LIKE '%" . $query . "%')";
$q5 = "(`Publication Date` LIKE '%" . $query . "%')";
$q6 = "(`ISBN-10` LIKE '%" . $query . "%')";
$q7 = "(`ISBN-13` LIKE '%" . $query . "%')";
$qfinal = $q1 . " OR " . $q2 . " OR " . $q3 . " OR " . $q4 . " OR " . $q5 . " OR " . $q6 . " OR " . $q7;

$qt1 = "SELECT * FROM accountingtextbooks WHERE " . $qfinal;
$qt2 = "SELECT * FROM anthropologytextbooks WHERE " . $qfinal;
$qt3 = "SELECT * FROM architecturetextbooks WHERE " . $qfinal;
$qt4 = "SELECT * FROM biologytextbooks WHERE " . $qfinal;
$qt5 = "SELECT * FROM businesstextbooks WHERE " . $qfinal;
$qt6 = "SELECT * FROM computersciencetextbooks WHERE " . $qfinal;
$qt7 = "SELECT * FROM economicstextbooks WHERE " . $qfinal;
$qt8 = "SELECT * FROM engineeringtextbooks WHERE " . $qfinal;
$qt9 = "SELECT * FROM geographytextbooks WHERE " . $qfinal;
$qt10 = "SELECT * FROM geologytextbooks WHERE " . $qfinal;
$qt11 = "SELECT * FROM historytextbooks WHERE " . $qfinal;
$qt12 = "SELECT * FROM mathematicstextbooks WHERE " . $qfinal;
$qt13 = "SELECT * FROM philosophytextbooks WHERE " . $qfinal;
$qt14 = "SELECT * FROM psychologytextbooks WHERE " . $qfinal;
$qt15 = "SELECT * FROM sociologytextbooks WHERE " . $qfinal;


$query = $qt1 . " UNION " . $qt2 . " UNION " . $qt3 . " UNION " . $qt4 . " UNION " . $qt5 . " UNION " . $qt6 . " UNION " . $qt7 . " UNION " . $qt8 . " UNION " . $qt9 . " UNION " . $qt10 . " UNION " . $qt11 . " UNION " . $qt12 . "UNION " . $qt13 . " UNION " . $qt14 . " UNION " . $qt15;

$result= mysql_query($query); 

$num = mysql_numrows($result);

echo "<table id='search' border='1'>

<tr>
<tr>
<th>Author(s)</th>
<th>Title</th>
<th>Price</th>
<th>Edition</th>
<th>Date</th>
<th>ISBN-10</th>
<th>ISBN-13</th>
</tr>";

while($row = mysql_fetch_array($result))
{
  echo "<tr>";
  echo "<td>" . $row['Author(s)'] . "</td>";
  echo "<td>" . $row['Title'] . "</td>";
  echo "<td>" . $row['Price'] . "</td>";
  echo "<td>" . $row['Edition'] . "</td>"; 
  echo "<td>" . $row['Publication Date'] . "</td>"; 
  echo "<td>" . $row['ISBN-10'] . "</td>"; 
  echo "<td>" . $row['ISBN-13'] . "</td>";
}

?>

您在哪里连接到数据库

您应该像这样连接到mysql:

<?php
$link=@mysql_connect(/*host:*/'localhost',/*user:*/'root',/*password:*/'') or die('err/:'.mysql_error());

$db=mysql_select_db(/*database:*/'test') or die('err:'.mysql_error(),/*the resorce link that the warning is because*/$link);

$res=mysql_query($query);
?>
表示您没有正确的连接,因此您应该查看您的
mysql\u connect
,看看它是否有以下错误:

$link=@mysql_connect(/*host:*/'localhost',/*user:*/'root',/*password:*/'') or die('err/:'.mysql_error());

mysql\u query
函数失败并返回FALSE,这是一个布尔值,正如警告中所述。检查查询以查找其中的一些错误

您可以在
mysql\u query($query)
之前
echo$query
并在select上查找错误。使用联合时,最常见的问题是每个select语句的rown计数不同

一些注意事项:

  • mysql.*
    函数已弃用。您应该改用
    mysqli.*
    PDO
  • 在将表单输入附加到查询之前,请对其进行清理

  • 你的代码非常不安全!谷歌“SQL注入”请!!有一点是,您不应该使用这样的代码来阻止SQL注入。另一件事是——你真的需要为每种类型的书单独设置一张桌子吗?您应该有一个表,在表列中有“type”,并为每种类型的书设置类型。如果有300种书呢?每次搜索300个表?这看起来像是一个糟糕的设计问题:-(我有一个有效的连接,我只是忽略了它。当我查询其他数据时,该连接有效。但与此查询不同。谢谢,我将对此进行研究。@user3566709-我的答案已更新,请检查它。嗯……我没有看到连接中有错误。我是否遗漏了什么?我已添加了上面的代码。该连接还可以用于查询o。)这些数据,但我无法找出问题所在。因此,我猜我发现您的问题是因为范围可变,我相信如果您找到问题的原因,您不会再次犯此类错误。请给我您的完整代码,我将为您更正,或者您可以自己搜索。谢谢,我将尝试
    Warning: mysql_numrows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Shopping Cart 2.0\search.php on line 52
    
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Shopping Cart 2.0\search.php on line 67
    
    $link=@mysql_connect(/*host:*/'localhost',/*user:*/'root',/*password:*/'') or die('err/:'.mysql_error());