18

シンプルなカスタム CMS を構築しようとしていますが、エラーが発生します。

警告: mysqli_query() は、パラメータ 1 が MySQLi であると想定しています。

このエラーが発生するのはなぜですか? 私のコードはすべてすでに MySQLi であり、1 つではなく 2 つのパラメーターを使用しています。

$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");

//check connection
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL:" . mysqli_connect_error();
}

function getPosts() {
    $query = mysqli_query($con,"SELECT * FROM Blog");
    while($row = mysqli_fetch_array($query))
    {
        echo "<div class=\"blogsnippet\">";
        echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
        echo "</div>";
    }
}
4

3 に答える 3

29

コメントで述べたように、これはスコープの問題です。具体的には、関数$con内の範囲外です。getPosts

接続オブジェクトを依存関係として渡す必要があります。

function getPosts(mysqli $con) {
    // etc

また、接続に失敗した場合やエラーが発生した場合は、実行を停止することを強くお勧めします。このようなもので十分です

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // throw exceptions
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");

getPosts($con);
于 2013-09-18T02:10:02.280 に答える
11

$con でグローバル スコープを使用し、そのように getPosts() 関数内に配置します。

function getPosts() {
global $con;
$query = mysqli_query($con,"SELECT * FROM Blog");
while($row = mysqli_fetch_array($query))
    {
        echo "<div class=\"blogsnippet\">";
        echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
        echo "</div>";
    }
}
于 2014-07-03T06:07:30.777 に答える
0

getPosts()関数はグローバルであることを期待しているようですが、その$conように宣言していません。

多くのプログラマーは、大げさなグローバル変数を「コードの匂い」と見なしています。スケールのもう一方の端にある代替手段は、接続リソースを常に渡すことです。この 2 つの中間にあるのは、常に同じリソース ハンドルを返すシングルトン コールです。

于 2013-09-18T02:08:43.273 に答える