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()、結果リソースではなくブール値を返すことです。これが発生する理由は 2 つあります。

  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 から削除される予定です。代わりにMySQLiまたはPDOを使用してください(個人的には 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 に答える