2013-04-23 9 views
12

Sto usando 000webhost.com e sto usando phpMyAdmin lì. Sto ottenendo questo errore da mysql quando eseguo il mio script PHP come dice il titolo:Il conteggio delle colonne di mysql.proc è errato. Previsto 20, trovato 16. Il tavolo è probabilmente corrotto

Il conteggio delle colonne di mysql.proc è errato. Previsto 20, trovato 16.

La tabella è probabilmente danneggiata.

C'è qualche soluzione per questo? Grazie.

Modificato: Ecco il mio codice

<?php 
$username="usrname"; 
$password="passwd"; 
$database="a1xxxxx_mydb"; 
$host="mysqlxx.000webhost.com"; 
mysql_connect($host,$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 
if (isset($_GET["userLatitude"]) && isset($_GET["userLongitude"])) { 

$userLatitude=$_GET['userLatitude']; 
$userLongitude=$_GET['userLongitude']; 
$result = mysql_query("SELECT locationName, (6371 * acos(cos(radians(floatval( $userLatitude))) * cos(radians(locationLatitude)) * cos(radians(locationLongitude) - radians(floatval($userLatitude))) + sin(radians(floatval($userLongitude))) * sin(radians(locationLatitude)))) AS distance 
     FROM Location HAVING distance < 2 ORDER BY distance LIMIT 0 ,20") or die(mysql_error()); 
echo $result; 

// check for empty result 
if (mysql_num_rows($result) > 0) { 
    // looping through all results 
    // products node 
    $response["Location"] = array(); 

    while ($row = mysql_fetch_array($result)) { 
    // temp user array 
    $product = array(); 
    $product["locationName"] = $row["locationName"]; 
    $product["locationInfo"] = $row["locationInfo"]; 
    $product["locationLatitude"] = $row["locationLatitude"]; 
    $product["locationLongitude"] = $row["locationLongitude"]; 
    $product["locationPic"] = $row["locationPic"]; 
    $product["city"] = $row["city"]; 



    // push single product into final response array 
    array_push($response["Location"], $product); 
} 
// success 
$response["success"] = 1; 

    // echoing JSON response 
    echo json_encode($response); 
} else { 
// no products found 
$response["success"] = 0; 
$response["message"] = "No products found"; 

// echo no users JSON 
echo json_encode($response); 
} 
} 
    else { 
    // required field is missing 
    $response["success"] = 0; 
    $response["message"] = "Required field(s) is missing"; 

    // echoing JSON response 
    echo json_encode($response); 
} 
mysql_close(); 
?> 
+0

fornire qualche dettaglio in più sarebbe un buon inizio. Stai eseguendo una stored procedure? UDF? Che ne dici di mostrare parte del codice che stai cercando di eseguire?Siamo bravi, ma non siamo psichici e non possiamo leggere la tua mente o visualizzare il tuo schermo da remoto. –

+0

oh hai ragione, sto inserendo il codice il più velocemente possibile. Non riesco a collegarmi a 000webhost.com. Lo posterò. Grazie :) – user2086258

+0

http://dba.stackexchange.com/questions/956/resolving-issue-with-mysql-proc-after-upgrading-mysql-from-5-0-to-5-1 –

risposta

10

Questo errore si verifica quando un cattivo aggiornamento è fatto. Ad esempio, succede se si aggiorna da 5.0 a 5.1 ma non si esegue lo script mysql_upgrade; o, in rari casi, probabilmente accade se si aggiorna direttamente da 5.0 a 5.5. (Molte persone lo fanno, ma tali aggiornamenti non sono ufficialmente supportati) Tu dici che stai usando un servizio di hosting - beh, penso che dovresti creare un ticket e dire loro del problema. Se non hai il privilegio SUPER, non puoi fare nulla. Ma se si dispone di tale diritto, basta eseguire mysql_upgrade: http://dev.mysql.com/doc/refman/5.1/en/mysql-upgrade.html

+1

L'esecuzione di 'mysql_upgrade -u root -p' ha corretto il mio database per me. Grazie. – jorisw

1

Anche se si può essere corretto sulla necessità per l'aggiornamento, questo non è l'unico motivo per cui si verifica questo errore.

Quando il seguente viene chiamato con una query che restituisce è riportata 1 fila

my $rv = $sth_indexq->fetchall_arrayref; 

il seguente errore:

DBD::mysql::st execute failed: Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50520, now running 50528. Please use mysql_upgrade to fix this error. at 
... 

Tuttavia, la vera causa dell'errore era uso di fetchall_arrayref anziché fetchrow_arrayref. Di seguito ha lavorato senza errori:

my $rv = $sth_indexq->fetchrow_arrayref; 

I dati in $ camper era solo 1 livello profondo, non 2.

La soluzione mysql_upgrade può risolvere molto bene questo problema, ma la soluzione semplice è conoscere i dati e utilizzare il codice di recupero corretto.

J.White

+0

formatta sempre con il codice, usando ctrl + k se hai scritto del codice. – Hamad

+1

"conosci i tuoi dati": vero, ma mysql.proc non sono i nostri dati (e ci sono volute ore, troppi, per notare che ...) –

25

ho avuto questo errore pure. Ho riparato eseguendo

mysql_upgrade -u root -p 

Inoltre, riavviare il servizio mysql eseguendo

service mysqld restart 
+0

Questa dovrebbe essere la risposta accettata. – supersan

+0

molto, hai salvato il giorno! –

0

Ho avuto lo stesso problema quando ho aggiornato il server MySQL 5,5-5,7 in Debian 8 (Jessie). Nel mio caso, ha funzionato bene quando ho eseguito il seguente comando:

mysql_upgrade --force -uroot -p 

Spero che vi aiuterà a