1

現在、データベースにアクセスしようとしていますが、メッセージが表示されます

未定義の変数: リンク

私のコードは次のとおりです。

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'penbird098');
define('DB_NAME', 'cmstest');

$link = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_error($link));
mysqli_set_charset($link, 'utf8');

function getPosts(){

    $query = "SELECT * FROM post" or die($link);
    $result = mysqli_query($link, $query);
    $num = mysqli_num_rows($result);

    if($num > 0){

        while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
            echo $row['Title'];
        }

    }
}  

getPosts();

私は何を間違っていますか?私はコードを読んで、何度か読み直したほか、Google を調べたり、さまざまな可能性をランダムに試したりしましたが、その理由がわかりません。関数の外部から関数に変数を渡すことができないことに関係していると推測していますが、私が正しければ、これを行う方法や最善の方法がわかりません、アドバイスよろしくお願いします。

また、私は自分のコードでベスト プラクティスを使用しようとしているので、正しくないものはすべて知っておくとよいでしょう。

PS接続はincludes/connectにあり、関数はincludes/functionsにあります関数の呼び出しはindexにあります

4

2 に答える 2

4

次の行を関数に追加します。

global $link;

関数スコープでのグローバル変数の使用に関するこのリファレンスを参照してください: http://php.net/manual/en/language.variables.scope.php

上記の参照から:

echo ステートメントは $a 変数のローカル バージョンを参照し、このスコープ内の値が割り当てられていないため、このスクリプトは出力を生成しません。C のグローバル変数は、ローカル定義によって特にオーバーライドされない限り、関数で自動的に使用できるという点で、これは C 言語とは少し異なることに気付くかもしれません。これにより、ユーザーが誤ってグローバル変数を変更する可能性があるという問題が発生する可能性があります。PHP では、グローバル変数を関数内で使用する場合、グローバル変数を関数内で宣言する必要があります。

于 2012-10-11T22:34:01.997 に答える
2

パラメータとして渡すか、グローバルとして使用できます。

function getPosts($dbLink){
 ....
}

または:

function getPosts(){
   global $link;
}

ただし、コードには他のエラーもあります。

$query = "SELECT * FROM post" or die($link); 

正しくありません。これはおそらくあなたが意図したものです:

$query = "SELECT * FROM post";
$result = mysqli_query($link, $query) or die("Error: ".mysql_error());
$num = mysqli_num_rows($result);
于 2012-10-11T22:37:40.000 に答える