Количество столбцов mysql.proc неверно. Ожидаемое 20, найдено 16. Таблица, вероятно, повреждена

Я использую 000webhost.com, и я использую phpMyAdmin там. Я получаю эту ошибку от mysql, когда я запускаю свой PHP-скрипт, поскольку заголовок говорит:

Количество столбцов mysql.proc неверно. Ожидаемое 20, найдено 16.

Возможно, таблица повреждена.

Есть ли решение для этого? Спасибо.

Отредактировано: вот мой код

<?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(); ?> 

У меня тоже была эта ошибка. Я исправил его, запустив

 mysql_upgrade -u root -p 

Кроме того, перезапустите службу mysql, запустив

 service mysqld restart 

Эта ошибка возникает при плохом обновлении. Например, это происходит, если вы обновляетесь с 5.0 до 5.1, но не запускаете сценарий mysql_upgrade; или, в редких случаях, это может произойти, если вы сразу обновляетесь с 5.0 до 5.5. (Многие люди делают это, но такие обновления не поддерживаются официально). Вы говорите, что используете услугу хостинга – ну, я думаю, вам нужно создать билет и рассказать им о проблеме. Если у вас нет привилегии SUPER, вы ничего не можете сделать. Но если у вас есть это право, просто запустите mysql_upgrade: http://dev.mysql.com/doc/refman/5.1/en/mysql-upgrade.html

Хотя вы можете быть уверены в необходимости обновления, это не единственная причина возникновения этой ошибки.

Когда вызывается следующий запрос с возвратом 1 строки

  my $rv = $sth_indexq->fetchall_arrayref; 

сообщается следующее сообщение об ошибке:

 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 ... 

Однако реальной причиной ошибки было использование fetchall_arrayref вместо fetchrow_arrayref. Следующие ошибки выполнялись без ошибок:

 my $rv = $sth_indexq->fetchrow_arrayref; 

Данные в $ rv были только на 1 уровень, а не на 2 .

Решение mysql_upgrade может очень хорошо решить эту проблему, но простое решение знает ваши данные и использует правильный код поиска.

J.White

У меня была та же проблема, когда я обновил сервер mysql с 5.5 до 5.7 в Debian 8 (jessie). В моем случае он работал нормально, когда я выполнил следующую команду:

 mysql_upgrade --force -uroot -p 

Надеюсь, это поможет вам