복붙노트

경고 : mysqli_query ()는 매개 변수 1이 mysqli이고,

PHP

경고 : mysqli_query ()는 매개 변수 1이 mysqli이고,

간단한 사용자 지정 CMS를 만들려고하는데 오류가 발생합니다.

이 오류가 발생하는 이유는 무엇입니까? 내 모든 코드는 이미 MySQLi이고 두 개 매개 변수를 사용하고 있습니다.

$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>";
    }
}

해결법

  1. ==============================

    1.의견에서 언급했듯이, 이것은 범위 지정 문제입니다. 특히, $ con은 getPosts 함수 내에서 범위 내에 있지 않습니다.

    의견에서 언급했듯이, 이것은 범위 지정 문제입니다. 특히, $ con은 getPosts 함수 내에서 범위 내에 있지 않습니다.

    종속성으로 연결 객체를 전달해야합니다.

    function getPosts(mysqli $con) {
        // etc
    

    또한 연결이 끊어지면 실행을 중지하는 것이 좋습니다. 이 같은 것이 충분해야합니다.

    $con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
    if (mysqli_connect_errno()) {
        throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
    }
    
    getPosts($con);
    
  2. ==============================

    2.$ con에 전역 범위를 사용하고 getPosts () 함수 안에 넣는다. 그렇게.

    $ 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>";
        }
    }
    
  3. ==============================

    3.getPosts () 함수는 $ con가 전역 변수가 될 것으로 기대하고있는 것처럼 보이지만, 그렇게 선언하지는 않습니다.

    getPosts () 함수는 $ con가 전역 변수가 될 것으로 기대하고있는 것처럼 보이지만, 그렇게 선언하지는 않습니다.

    많은 프로그래머들은 대머리 글로벌 변수를 "코드 냄새"라고 생각합니다. 규모의 다른 끝에서 대안은 항상 연결 리소스를 전달하는 것입니다. 두 부분 사이의 부분은 항상 동일한 리소스 핸들을 반환하는 단일 호출입니다.

  4. from https://stackoverflow.com/questions/18862743/warning-mysqli-query-expects-parameter-1-to-be-mysqli-null-given-in by cc-by-sa and MIT license