복붙노트

경고 : mysql_fetch_array () : 제공된 인수가 유효한 MySQL 결과가 아닙니다.

PHP

경고 : mysql_fetch_array () : 제공된 인수가 유효한 MySQL 결과가 아닙니다.

이 오류를 실행하려고하면 오류가 발생합니다.

<?php
require_once('includes/DbConnector.php');
$connector = new DbConnector();
$result = $connector->query('SELECT title,content FROM staff_vacancies ORDER BY ordering LIMIT 0,100');
// Get an array containing the results.
// Loop for each item in that array
while ($row = $connector->fetchArray($result)){

echo $row['title'].'</h3>';
echo $row['content'];
}
?>

링크 된 파일이 있습니다. DbConnector.php :

<?php
////////////////////////////////////////////////////////////////////////////////////////
// Class: DbConnector
// Purpose: Connect to a database, MySQL version
///////////////////////////////////////////////////////////////////////////////////////
require_once 'SystemComponent.php';

class DbConnector extends SystemComponent {

var $theQuery;
var $link;

//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector(){

    // Load settings from parent class
    $settings = SystemComponent::getSettings();

    // Get the main settings from the array we just loaded
    $host = $settings['dbhost'];
    $db = $settings['dbname'];
    $user = $settings['dbusername'];
    $pass = $settings['dbpassword'];

    //the settings
    $host = 'localhost';
    $db = 'xxx';
    $user = 'xxx';
    $pass = 'xxx';

    // Connect to the database
    $this->link = mysql_connect($host, $user, $pass);
    mysql_select_db($db);
    register_shutdown_function(array(&$this, 'close'));

}

//*** Function: query, Purpose: Execute a database query ***
function query($query) {
    $this->theQuery = $query;
    return mysql_query($query, $this->link);
}

//*** Function: getQuery, Purpose: Returns the last database query, for debugging ***
function getQuery() {
    return $this->theQuery;
}

//*** Function: getNumRows, Purpose: Return row count, MySQL version ***
function getNumRows($result) {
    return mysql_num_rows($result);
}

//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {
    return mysql_fetch_array($result);
}

//*** Function: close, Purpose: Close the connection ***
function close() {
    mysql_close($this->link);
}


}
?>

아무도 문제가 뭔지 알고 있습니까?

해결법

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

    1.

    조회 결과에 $ result가 유효하지 않은 자원이되는 문제점이 있어야합니다.

    쿼리를 실행하는 줄 다음에 mysql_error ()를 확인해보십시오.

    편집하다:

    사실 DBConnector 클래스 함수 query ()를 다음과 같이 변경하여 잘못된 쿼리가있을 때 식별 가능한 오류가 발생합니다.

    function query($query) {
        $this->theQuery = $query;
        $queryId = mysql_query($query,$this->link);
        if (! $queryId) {
            throw new Exception(mysql_error().".  Query was:\n\n".$query."\n\nError number: ".mysql_errno();
        }
        return $queryId;
    }
    
  2. ==============================

    2.

    이 오류는 쿼리가 실패했음을 의미합니다. mysql_query ()는 에러가 발생하면 false를 반환하고, 에러 메시지를 발생시키는 mysql_fetch_array ()에 false를 전달한다.

    누락 된 / 잘못된 테이블 또는 필드로 인해 쿼리가 실패 할 수 있습니다. 자세한 오류를 보려면 mysql_error ()의 결과를 출력하십시오.

    mysql_ * 라이브러리는 더 이상 사용되지 않습니다. MySQLi 또는 PDO로 업그레이드하는 것이 좋습니다.

  3. ==============================

    3.

    // Load settings from parent class
    $settings = SystemComponent::getSettings();
    
    // Get the main settings from the array we just loaded
    $host = $settings['dbhost'];
    $db = $settings['dbname'];
    $user = $settings['dbusername'];
    $pass = $settings['dbpassword'];
    
    //the settings
    $host = 'localhost';
    $db = 'xxx';
    $user = 'xxx';
    $pass = 'xxx';
    

    연결 바의 재 지정을 원하셨습니까? 아니면 몇 줄의 스텁 코드를 꺼내는 걸 잊었습니까? 또는 $ 설정에 포함 된 것을 보여주는 예가 무엇입니까?

  4. ==============================

    4.

    mysql_error ()에서 에러를 제공하십시오. 그게 아니라면 ... 필드 이름을 벗어나려고?

    $result = $connector->query('SELECT `title`,`content` FROM `staff_vacancies` ORDER BY `ordering` LIMIT 0,100');
    
  5. ==============================

    5.

    조회 결과에 $ result가 유효하지 않은 자원이되는 문제점이 있어야합니다.

    이것을 사용하십시오

    <?php
    require_once('includes/DbConnector.php');
    $connector = new DbConnector();
    $result = $connector->query('SELECT title,content FROM staff_vacancies ORDER BY ordering LIMIT 0,100');
    // Get an array containing the results.
    // Loop for each item in that array
    
    if($result){
    while ($row = $connector->fetchArray($result)){
    
    echo $row['title'].'</h3>';
    echo $row['content'];
    }
    }
    ?>
    
  6. ==============================

    6.

    나는 내 문제를 해결하기 위해 이것을 게시물에서 찾았다. Slds.

    예, 대답은 간단합니다. 사용 된 쿼리는 말 그대로 getrow 내부의 쿼리이기 때문에 실제 결과가 아닙니다. 수정 사항은 다음과 같습니다. 다음과 같은 줄을 모두 찾으십시오.

    mysql_fetch_array(mysql_query("...snip...";-) );
    

    그리고 앞에 "@"를 추가하면 다음과 같이 보입니다.

    @mysql_fetch_array(mysql_query("...snip...";-) );
    

    다음 줄에 똑같은 일을하십시오. 암호:

    mysql_num_rows(mysql_query("...snip...";-) );
    

    위와 같은 단계를 수행하여 "@"을 다음과 같이 추가하십시오.

    @mysql_num_rows(mysql_query("...snip...";-) );
    

    이 모든 것은 "yyy에서 xxx를하는 동안"이라고 말합니다. 그렇지 않으면 누락 된 결과 값으로 인해 죽었습니다. 그것은 PHP의 것입니다 ..

    매력처럼 작동하고, 전체 코드를 찢어 내고 Modernbill에 모두 끼워 넣기 위해 5 분이 걸렸습니다. 동일한 데이터베이스를 공유하고 완벽하게 작동합니다.

  7. from https://stackoverflow.com/questions/795746/warning-mysql-fetch-array-supplied-argument-is-not-a-valid-mysql-result by cc-by-sa and MIT lisence