4

可能重复:
PHP:警告:sort() 期望参数 1 是数组,资源给定

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

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

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

代码:(也可通过 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;
}

?>
4

1 回答 1

13

问题在于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`
于 2012-07-10T22:47:41.627 回答