警告mysql_fetch_array()要求参数1为resource,给定布尔值

时间:2014-04-26 23:38:30

标签: php

我希望能得到一些帮助或推动正确的方向,我是php新手,还在学习。

目前我正在尝试开发一个可以添加,编辑,删除和搜索我的MYSQL数据库的网站。添加,编辑,删除部分我感到非常自信,不应该有问题。我只是遇到搜索功能问题。我可以手动搜索我的数据库并显示该表中的所有内容,但现在我正在尝试创建它以便我可以输入名字或姓氏,并且将显示表格中有关查询的所有数据。

目前我有2个php文件(search.php):带有“输入类型:文本框”和提交按钮(所以我可以输入名字并点击搜索),我也有一个(searchresult.php):我想搜索我输入的第一个名字,并显示cust_id,名字,姓氏和电子邮件(在我的数据库中的customers表中填充)。

目前我收到的错误是:“警告mysql_fetch_array()期望参数1是资源,布尔给定”,iv一直在阅读有关该问题,但仍不确定该怎么做,并希望得到一些帮助用我的代码,也许是对错误的更好(愚蠢的)解释。

下面显示我的两个页面的代码:

下面是我的“search.php”代码:只是一个简单/基本的html

<!DOCTYPE HTML>
<html>
<head>
<title>Conxbiz - Search Customer</title>
<link rel="stylesheet" type="text/css" href="../conxbiz/css/main.css">
</head>

<body>
<form name="form" action="searchresult.php" method="get"> 
<input name="firstname" type="text"> 
<input type="submit" name="search" value="Search"> 
</form> 

<?php

?>


</body>
</html>

以下是我的“searchresult.php”代码:

<!DOCTYPE HTML>
<html>
<head>
<title>Conxbiz - Home</title>
<link rel="stylesheet" type="text/css" href="../conxbiz/css/main.css">
</head>

<body>


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

echo "<table>";
echo "<tr>";
echo "<th>cust_id</th>";
echo "<th>First Name</th>";
echo "<th>Last Name</th>";
echo "<th>Email</th>";
echo "</tr>";

mysql_connect("localhost", "root", "") or die("Could not connect: " . mysql_error());
mysql_select_db("conxbiz");

$query = mysql_query("SELECT * FROM customers WHERE firstname '$firstname'");


while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
{
$cust_id = $row['cust_id'];
$firstname = $row['firstname'];
$lastname = $row['lastname'];
$email = $row['email'];

echo "<tr>";
echo "<td>" . $row['cust_id'] . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}

echo "</table>";
?>


</body>
</html>

所以重新上限,我的目标是我想在文本框中输入说“adam”,点击搜索并将php代码拉出“cust_id,firstname,lastname和email”并将其显示在屏幕上我在数据库中拥有的所有广告。

是否属于:

  1. 它没有读取我从文本框中传递的内容,因此它失败了。
  2. 它正在阅读我正在传递但我的SQL是错误的,所以它失败了
  3. 传递的是一个数字而不是文本,所以它不期待它。
  4. 返回true / false而不显示数据?
  5. 我的代码都错了,我应该放弃:(lol
  6. id喜欢我的编码帮助,但我希望我也能得到错误的解释以供将来参考!

    我的编码不是最好的,但就像我说我还在学习,现在只是试图让基本功能起作用......宝贝步骤,哈哈......

    我猜我的编码是完全错误的:(但希望有人可以帮助我

    提前感谢您的任何帮助/指导!

3 个答案:

答案 0 :(得分:3)

这是无效的语法:

SELECT * FROM customers WHERE firstname '$firstname'

您需要一个运营商,例如=

SELECT * FROM customers WHERE firstname = '$firstname'

请注意,即使进行此更改,您的代码也容易受到SQL注入攻击。事实上,如果它可行,我建议完全放弃mysql_*函数(它们已被弃用)并转移到PDO,这样可以更容易地编写不易受攻击的代码SQL注入。

答案 1 :(得分:0)

在行中:

$query = mysql_query("SELECT * FROM customers WHERE firstname '$firstname'");

在这个名字之后加上一个等号

$query = mysql_query("SELECT * FROM customers WHERE firstname = '$firstname'");

此外,使用前缀为mysql的数据库对象和方法(如mysql_query)已经过时且不安全。我建议更新前缀为mysqli的方法,或者如果您想保护自己的应用程序,请使用PDO

答案 2 :(得分:0)

每当您传递给mysql_query的查询的查询出现错误时,都会收到此错误。这意味着您的查询有问题。您需要检查的第一件事是您编写的查询。

在这种情况下,您忘记放置&#34; =&#34;在姓氏&$ 39; $ firstname&#39;&#34;&#34;。

之间签名

因此尝试

$ query = mysql_query(&#34; SELECT * FROM customers WHERE firstname =&#39; $ firstname&#39;&#34;);

或者因为它是一个字符串(char或varchar类型),所以尝试使用like运算符。

$ query = mysql_query(&#34; SELECT * FROM customers WHERE firstname like&#39; $ firstname&#39;&#34;);