-1

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值
mysql_fetch_assoc() 期望参数 1 是资源

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

这是我使用 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 是资源,给定的布尔值

4

6 回答 6

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

删除引号。

如果你用过var_dump($result5);,你会明白它是string. 原因是双引号或单引号中的所有内容在 php 中都被视为字符串。

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

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

因为mysql_queryfalse在失败时返回

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

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

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

在之后添加*(或列名)select

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

于 2012-10-19T12:27:38.527 回答
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";
}
于 2012-10-19T12:28:05.630 回答
0

改变 -

$result5 = "mysql_query($query5)";

$result5 = mysql_query($query5);
于 2012-10-19T12:28:24.143 回答
0

用这个

$result5 = mysql_query($query5);

而不是这个

$result5 = "mysql_query($query5)";
于 2012-10-19T12:30:03.643 回答
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 注入攻击。关于这一点有很多要了解的,单个 Stack Overflow 答案不会涵盖它。因此,我将尝试通过简单地说您永远不应该使用用户输入值的原始字符串连接来构建 SQL 查询来总结这个概念。用户可以输入恶意输入并修改您的查询,从而有效地访问您的数据库。如果您的数据库以提升的权限运行,那么他们可以访问服务器上的更多内容,依此类推。

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

其次,不要使用mysql_函数。它们已被mysqli_函数取代,原因与我刚才提到的 SQL 注入内容不完全无关。 他们的文档页面甚至非常清楚地说明了这一点

于 2012-10-19T12:34:08.013 回答
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'];
}
于 2012-10-19T13:15:02.803 回答