PHP mysql_fetch_assoc错误

时间:2012-10-19 12:26:13

标签: php mysql fetch

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
  mysql_fetch_assoc() expects parameter 1 to be resource

我正在尝试从一个表中获取单个字段并将其添加到另一个表中。

这是我使用MySQL / PHP的第三天,所以我遇到了一些问题 PHP抛出一个错误,期望一个资源,但给出了一个字符串 它是一个表中自动递增的ID字段。

基本上,我拉出第一个名字和姓氏匹配的ID。

$query5 = "SELECT FROM ".$db_prefix."customer_det (`id`) 
WHERE fname = '".$fname."' 
AND lname = '".$lname."'";

$result5 = mysql_query($query5);
while($row = mysql_fetch_assoc($result5)){
$uid = $row['id'];
echo "$uid";
}

错误:

  

警告:mysql_fetch_assoc()期望参数1为资源,布尔值为

6 个答案:

答案 0 :(得分:4)

$result5 = "mysql_query($query5)";
           ^                    ^

删除引号。

如果你使用了var_dump($result5);,那就是string。原因是双引号或单引号中的所有内容都被视为php中的字符串。

你还需要处理这样的错误:

$result5 = mysql_query($query5) or die(mysql_error());

因为mysql_query将在失败时返回false

如果您对字符串表示感兴趣,请查看manual

此外,您的查询中存在语法错误。您缺少要从db中检索的列:

$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'";
                 ^

*

之后添加select(或列名称)

注意: mysql_*函数已弃用。替代方案是:mysqli_*PDO

答案 1 :(得分:1)

$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'";
$result5 = mysql_query($query5);
while($row = mysql_fetch_assoc($result5)){
  $uid = $row['id'];
  echo "$uid";
}

答案 2 :(得分:0)

更改 -

$result5 = "mysql_query($query5)";

TO

$result5 = mysql_query($query5);

答案 3 :(得分:0)

使用此

$result5 = mysql_query($query5);

而不是这个

$result5 = "mysql_query($query5)";

答案 4 :(得分:0)

我猜测抛出错误的一行就是这一行:

while($row = mysql_fetch_assoc($result5)){

函数mysql_fetch_assoc是“期望资源”,因为您需要将SQL查询的结果传递给它,它将从这些结果中获取。但是,$result5不是SQL查询,而是字符串:

$result5 = "mysql_query($query5)";

我不确定你为什么要引用它,但如果你想要实际解释代码,你不希望它们在那里:

$result5 = mysql_query($query5);

这将运行mysql_query函数并将其返回值(即资源)放入$result5


现在是更重要的事情......

首先,您的代码对SQL injection attacks持开放态度。关于这一点有很多要了解,单个Stack Overflow答案不会涵盖它。因此,我将尝试总结这个概念,只是说你永远不应该使用用户输入值的原始字符串连接来构建SQL查询。用户可以输入恶意输入并修改您的查询,从而有效地访问您的数据库。如果您的数据库使用提升的权限运行,那么他们可以访问服务器上的更多内容,依此类推。

基本上,始终清理您的输入并且从不隐含地信任来自用户的输入

其次,不要使用mysql_函数。它们已被mysqli_函数取代,原因与我刚刚提到的SQL注入内容完全无关。 The documentation page for them even very clearly states this

答案 5 :(得分:0)

您的查询中缺少所选字段(id)的名称:

$query = "SELECT id FROM {$db_prefix}customer_det WHERE fname = '{$fname}' AND lname = '{$lname}'";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
    echo $row['id'];
}
相关问题