1

私は自分のコードに問題があります.PHP FILEでクエリを実行するSELECT * FROM materialと、.

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result 
resource in C:\AppServ\www\biblioteca\include\doLogin.php on line 31 []

_

関数を含む PHP ファイル

.........
public function searchMat($tipoBusqueda,$terminoBuscar){

$query = " SELECT * FROM material ";
$result = mysql_query($query) or die (mysql_error());
$resultArray =  mysql_fetch_assoc($result);
return $resultArray;
}

関数を含むその他の PHP ファイル

$results = $db->searchMat($tipoBusqueda, $terminoBuscar);
$jsonSearchResults = array();

if ($results != false) {
    while($row = mysql_fetch_assoc($results)) {
        $jsonSearchResults = array (
        'clavemat' => $row['cve_mat'],
        'tipomat' => $row['tipo_mat'],
        'titulomat' => $row['titulo_mat'],
        'autormat' => $row['autor_mat'],
        'editmat' => $row['edit_mat'],
        'success' => 'success', 
        );  
    }

    echo json_encode($jsonSearchResults);
} 

編集:

4

3 に答える 3

2

この行で:

$results = $db->searchMat($tipoBusqueda, $terminoBuscar);

$resultsは配列であり、MySQL結果リソースではありません。したがって、に渡す必要はありませんmysql_fetch_assoc。あなたはすでにそれをで行っていsearchMatます。

ただし、ここには問題があります。searchMat結果から1行だけを取得し、それを返します。その後、残りの行を取得する方法はなくなります。searchMatリソースを返すか、whileループをに移動searchMatして、クエリのすべての結果を含む配列を返すことができるようにする必要があります。

このようにしてみてください:

public function searchMat($tipoBusqueda,$terminoBuscar){
    $query = "
        SELECT 
            cve_mat AS clavemat,
            tipo_mat AS tipomat,
            titulo_mat AS titulomat,
            autor_mat AS autormat,
            edit_mat AS editmat,
            success
        FROM material
    ";
    $result = mysql_query($query) or die (mysql_error());
    $out = array();
    while ($row =  mysql_fetch_assoc($result)) 
    {
        $out[] = $row;
    }
    return $out;
}


$results = $db->searchMat($tipoBusqueda, $terminoBuscar);

if (!empty($results)) {
    echo json_encode($results);
} 

また、クエリを変更して、列に必要な名前が付けられるようにしました。そうすれば、あるアレイを別のアレイにコピーする手間を省くことができます。

于 2012-05-30T00:15:24.633 に答える
2

searchmat 関数は、最初の行ではなく $result を返す必要があります。

于 2012-05-29T23:56:18.113 に答える
1

あなたはmysql_fetch_assoc2回電話しています。から取得したリソースで初めてmysql_query、アレイで 2 回目 - 無効です。

また、すべての行をループする場合は、 に追加する $jsonSearchResults必要があります。@RezaSanaie が既に述べたように、コードの反復ごとに上書きされます。そのはず:

public function searchMat() {
/* returns the material table as a resource */
    $query = "SELECT * FROM material";
    $result = mysql_query($query) or die (mysql_error());
    return $result;
}

$results = $db->searchMat();
$jsonSearchResults = array();
while ($results!=false && $row = mysql_fetch_assoc($results)) {
    array_push($jsonSearchResults, array(
        'clavemat' => $row['cve_mat'],
        'tipomat' => $row['tipo_mat'],
        'titulomat' => $row['titulo_mat'],
        'autormat' => $row['autor_mat'],
        'editmat' => $row['edit_mat'],
        'success' => 'success'
    ));
}   
echo json_encode($jsonSearchResults);
于 2012-05-29T23:58:53.530 に答える