0

まず第一に、私の英語が完璧でない場合は申し訳ありません。英語は私の母国語ではありません。自分を理解してもらえるように頑張ります。

mysqli を使用してデータベースに接続してクエリを実行するために必要なすべての手順を作成しようとしています。これらは、必要に応じて含まれる別の php ファイルに残ります。これは、データベースに接続するためのコードを常に記述しなくて済むようにするためです。

私の dbConnection.php ファイルには次のものがあります。

<?php
require("login.php");

$connection;
function connect() {
    global $connection;

    $connection = new mysqli($host, $username, $password, $database);

    if ($connection->connect_errno) {
        printf("Connection failed: %s\n", $connection->connect_error);
        exit();
    }
}

function mysqlQuery($query) {
    global $connection;

    if($connection == NULL) connect();

    $result = $connection->query($query);
    if (!$result) {
        printf("Query failed: %s\n", $connection->error);
        exit();
    }

    return $result;
}

?>

(login.php には接続用の変数があります)

データベースに接続する必要があるときは、require("dbConnection.php"); を使用します。

問題は、mysqlQuery 関数を呼び出すと、常に「クエリに失敗しました: データベースが選択されていません」と表示されることです。データベース名が正しいと確信しています。

コードをスクリプトで (個別のファイルではなく) 直接使用すると、正常に動作します。

前もって感謝します。

問題は解決しました。グローバル $host、$username、$password、$database として宣言するのを忘れていました。

4

1 に答える 1

1

コードがうまくいかない主な理由は2つあります。

  1. 間違ったアイデアまたはアルゴリズムまたは構造
  2. そのアイデアまたはアルゴリズムまたは構造の誤った実装

経験の浅いプログラマーは常に最初のものに固執し、2番目のものにはほとんど注意を払いません(したがって、「使用方法...?」と尋ねます)。実生活では2番目のものがより重要です。アルゴリズムは少ないですが、間違いは無数にあります。間違いを見つける方法を学ぶ必要があります。

$result = $connection->query($query) or trigger_error($connection->error."[$query]");そのような構造には意味がありませんが(mysqlQuery関数は実際には役に立たず、コード行で置き換えることができますこれははるかに優れています)、一見すると機能するはずです。
したがって、私たちは「それを行う方法」に集中する必要はありません。質問ですが、「なぜそれが機能しないのですか?」

後者の質問に対する答えは、デバッグと呼ばれます。あなたはそれを学び、あなたの日常の仕事で多用しなければなりません。実際には、コード内のすべての変数に目的の値が含まれているかどうかを確認する必要があることを意味します。

PHPによって生成されたすべてのエラーを確認することも、デバッグに不可欠です。
コードには常にerror_reporting(E_ALL);ディレクティブを含めてください(グローバル構成ファイルで問題ありません)。

また、開発システムでは、構成ini_set('display_errors',1);ファイルに追加します(ただし、本番環境では値を0に変更してください)。

私はこれらの2つの指令が問題にいくらかの光を当てると確信しています。
そうでない場合は、デバッグを続行します。

于 2012-12-16T06:17:57.060 に答える