2012-05-29 2 views
1

У меня проблема с моим кодом, причина, когда запускается запрос un PHP FILE, это извлекает все записи из SELECT * FROM material, затем переходит к файлу JS для процесса и сохраняет все записи в формат JSON массив, но появляется сообщение об ошибке:Ошибка при хранении нескольких записей в формате 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 FILE с функциями

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

EDIT:

+0

Ваш JS FILE должен быть файлом PHP. – Bergi

+0

В сообщении об ошибке говорится, что '$ result' не является допустимым параметром. Не могли бы вы дать нам код, который его генерирует, то есть источник '$ db-> searchMat'? – Bergi

+1

Также каждый раз ваша переменная '$ jsonSearchResults' перезаписывается. Вам нужно нажать на него записи, а не –

ответ

1

Вы звоните mysql_fetch_assoc два раза. В первый раз на resource вы получили от mysql_query, второй раз на массиве - недействительным.

Кроме того, когда вы будете перебирать все строки, вам необходимо указать add to$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); 
+0

Я пробую ур код, но сохраняю только первую запись из базы данных, и я хочу сохранить все записи из запроса! – SoldierCorp

+0

Вам нужно рассказать нам в вопросе, к чему вы хотите приблизиться ;-) Тогда у вас есть две ошибки ... Редактирование ответа. – Bergi

+0

Ur code its OK, но не печатать json formar, только печатать в формате HTML: [{"clavemat": "LICOELMCUS", "tipomat": "Libro", "titulomat": "Contabilidad", "autormat": "Elias Flores "," editmat ":« McGraw Hill »,« успех »:« успех »}, {« clavemat »:« LICUDEMCNU »,« tipomat »:« Libro »,« titulomat »:« Curso java »,« autormat », : «Deitel», «editmat»: «McGraw Hill», «success»: «success»}], а в Firebug не видят формат Json! – SoldierCorp

2

Ваша функция должна возвращать searchmat $ результат не первый ряд.

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); 
} 

Я также изменил свой запрос так, что столбцы уже названы, как вы хотите их. Тогда вам не придется беспокоиться о копировании одного массива в другой.

+0

Rithg, я перехожу к функции SearchMat, и я печатаю echo json_encode ($ jsonSearchResults); но проблема в том, что содержимое из формата json отсутствует в формате json, если нет в формате HTML: [{«clavemat»: «LICOELMCUS», «tipomat»: «Libro», «titulomat»: Contabilidad "," autormat ":« Elias Flores »,« editmat »:« McGraw Hill »,« успех »:« успех »}, {« clavemat »:« LICUDEMCNU »,« tipomat »:« Libro »,« titulomat », : «Curso java», «autormat»: «Deitel», «editmat»: «McGraw Hill», «success»: «success»}] – SoldierCorp

+0

Ваша проблема не имеет ничего общего с JSON. Я привел некоторый код в качестве примера того, как вы могли это сделать. Взгляни. – Okonomiyaki3000

+0

Спасибо человеку, ур код его ОК, только что оставил эту строку «header» («Content-Type: application/json»); перед "echo json_encode ($ jsonSearchResults)" ... но @Bergi answerme сначала! – SoldierCorp