【问题标题】:Warning: mysql_result() expects parameter 1 to be resource, boolean given [duplicate]警告:mysql_result() 期望参数 1 是资源,给定的布尔值 [重复]
【发布时间】:2012-07-10 22:43:45
【问题描述】:

可能重复:
PHP: Warning: sort() expects parameter 1 to be array, resource given

我的 PHP 函数脚本昨晚运行良好,现在当我今天登录继续处理它时,我得到了

“警告:mysql_result() 期望参数 1 是资源,给定的布尔值”。

我不知道为什么这不起作用。我已经在线阅读了 PHP 手册,我什至看到了我所做的使用和工作的示例。谁能帮我解决这个问题?我一直在修复一个又一个错误(当我今天登录时,很多事情都停止了工作),我在这里无所适从。如果有帮助,我将在 Windows 7 上为我的服务器使用 XAMPP。

代码:(also available via Pastebin)

<?php

function dbConnect() {
$dbserver="127.0.0.1";
$dbuser="Mike";
$dbpassword="mike";
$dbname="devsite";

$con = mysql_connect($dbserver, $dbuser, $dbpassword);
mysql_select_db($dbname, $con);
}

function getSiteTitle() {


$siteTitle = mysql_result(mysql_query("SELECT \`siteTitle\` FROM siteSettings"), 0);
return $siteTitle;
}

function getSiteHeader(){

$siteHeader = mysql_result(mysql_query("SELECT \`siteHeader\` FROM siteSettings"), 0);
return $siteHeader;
}

function getBodyContent() {


$bodyContent = mysql_result(mysql_query("SELECT \`bodyContent\` FROM siteSettings"), 0);
return $bodyContent;
}

?>

【问题讨论】:

  • 添加一些基本调试,检查查询是否正常,如果没有从mysql返回错误

标签: php mysql


【解决方案1】:

问题是mysql_query() 返回的是布尔值而不是结果资源。发生这种情况的原因有两个:

  1. 您执行的查询返回成功/失败而不是结果集(例如UPDATE
  2. 您的查询失败

在您的情况下,查询失败。它失败的原因是您在不需要的地方逃脱了 PHP 字符串中的反引号。

您的线条如下所示:

$siteTitle = mysql_result(mysql_query("SELECT \`siteTitle\` FROM siteSettings"), 0);

他们应该是这样的:

$siteTitle = mysql_result(mysql_query("SELECT `siteTitle` FROM siteSettings"), 0);

现在,一些旁注:

  • 不要编写使用mysql_* 函数的新代码。它们已被弃用,最终将从 PHP 中删除。改用MySQLiPDO(我个人推荐PDO,YMMV)
  • 以这种方式嵌套数据库函数并不是编写代码的特别好方法。每次函数调用后明确检查错误会更好。

例如:

$result = mysql_query("SELECT somecol FROM sometable");
if (!$result) {
  // Handle error here
}
// Now process the result
  • 您应该在查询中引用所有标识符或不引用(最好是全部)。仅引用某些内容会使阅读变得更加困难。

例如

SELECT `siteTitle` FROM `siteSettings`

【讨论】:

  • 并且为了防止将来出现类似的问题,OP 应该在尝试使用结果之前检查发出的每个mysql_query 的成功或失败结果。
  • 确实,我只是补充几点,包括此刻... :-D
  • +1 在 PDO 上。不会将您绑定到供应商,并且 SQL 注入保护很好。
  • 我忘记从我的 SQL 查询中删除单引号。即使没有他们,他们也失败了。我将遵循您的建议并改用 PDO。感谢您的所有帮助...我从未上过任何形式的正式 PHP 课程,所以我真的只是边学边学。
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多