1

我的代码有问题,原因是,当运行查询 un PHP FILE 时,它会从中检索所有记录SELECT * FROM material,然后将其传递给 JS FILE 进行处理并以数组 json 格式存储所有记录,但显示此错误:

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

您的 searchmat 函数应该返回 $result 而不是第一行。

于 2012-05-29T23:56:18.113 回答
2

在这一行:

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

$results是一个数组,而不是 MySQL 结果资源。所以你不需要将它传递给mysql_fetch_assoc. 你已经在searchMat.

不过这里有一个问题。searchMat只从结果中获取一行并返回它。之后,您将无法再获得其余的行。您应该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 回答
1

你打mysql_fetch_assoc了两次电话。第一次在您获得的资源mysql_query上,第二次在数组上 - 无效。

此外,当您遍历所有行时,您需要添加到 $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 回答