Количество столбцов 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();
?>

Ответ 1

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

mysql_upgrade -u root -p

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

service mysqld restart

Ответ 2

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

Ответ 3

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

Когда вызывается следующее с запросом, который возвращает 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

Ответ 4

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

mysql_upgrade --force -uroot -p

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

Ответ 5

У меня была такая же проблема, когда я обновлял XAMPP с xampp-osx-7.2.10 до 7.3.9 в MacOS Mohave. Таким образом, решение было:

Найдите файл mysql_upgrade в разделе "Macintosh HD ▸ Приложения ▸ XAMPP ▸ xamppfiles ▸ bin" и дважды щелкните его.