Php mysql.proc的列计数错误。预计20人,发现16人。表可能已损坏

Php mysql.proc的列计数错误。预计20人,发现16人。表可能已损坏,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我正在使用000webhost.com,我正在使用phpMyAdmin。当我运行我的PHP脚本时,我从MySQL中得到这个错误,标题是: mysql.proc的列计数错误。预计20人,发现16人 表可能已损坏 有什么解决办法吗 <?php $username="usrname"; $password="passwd"; $database="a1xxxxx_mydb"; $host="mysqlxx.000webhost

我正在使用000webhost.com,我正在使用phpMyAdmin。当我运行我的PHP脚本时,我从MySQL中得到这个错误,标题是:

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

完成错误升级时会发生此错误。例如,如果您从5.0升级到5.1,但不运行mysql\u升级脚本,就会发生这种情况;或者,在极少数情况下,如果直接从5.0升级到5.5,可能会发生这种情况。(很多人都这样做,但官方并不支持这种升级) 你说你正在使用一个托管服务——好吧,我认为你应该创建一个罚单并告诉他们这个问题。如果你没有超级特权,你就无能为力。 但如果您有此权利,只需运行mysql\u升级:

尽管您对升级必要性的看法可能是正确的,但这并不是发生此错误的唯一原因

使用返回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_升级解决方案可能很好地解决了这个问题,但简单的解决方案是了解您的数据并使用正确的检索代码


我也有这个错误。我通过跑步来修复它

mysql_upgrade -u root -p
service mysqld restart
另外,通过运行

mysql_upgrade -u root -p
service mysqld restart

我在Debian8(jessie)中将mysql服务器从5.5升级到5.7时也遇到了同样的问题。在我的例子中,当我执行以下命令时,它运行良好:

mysql_upgrade --force -uroot -p

希望它能帮助您

我在MacOS Mohave中将XAMPP从XAMPP-osx-7.2.10更新到7.3.9时遇到了同样的问题。因此,解决办法是:


在“Macintosh HD”中找到文件mysql\u升级⁩ ▸ ⁨应用⁩ ▸ ⁨XAMPP⁩ ▸ ⁨xamppfiles⁩ ▸ ⁨箱子⁩" 在Ubuntu 18.04上安装XAMPP 7.4.8后,MySQL Workbench 8.0.21中出现了类似的错误。使用phpMyAdmin没有问题

Error Code: 1558 Column count of mysql.proc is wrong. Expected 21, found 20. Created with MariaDB 100108, now running 100413. Please use mysql_upgrade to fix this error
解决方案:

sudo /opt/lampp/lampp start
/opt/lampp/bin/mysql_upgrade
问题解决


学分:XAMPP中似乎有一个bug-

我使用的是windows 10系统,对我有效的解决方案是 mysql\u升级-u root-p


但是您需要确保安装目录的mysql/bin文件夹中的mysql_升级脚本的路径需要添加到环境变量path中,才能使该命令正常工作

我在Ubuntu 20.04上使用xampp,返回相同消息错误的我的问题已通过此解决方案得到解决:

  • 转到xampp目录:cd/opt/lampp/
  • 转到bin目录:cd-bin
  • 执行脚本:sudo./mysql\u升级

  • 信用证:

    点击下面的浏览器命令

    /opt/lampp/bin/mysql_upgrade
    
    

    提供更多细节将是一个很好的开始。您是否正在运行存储过程?UDF?显示您试图运行的一些代码如何?我们很好,但我们不是通灵者,无法读取您的想法或远程查看您的屏幕。哦,您是对的,我正在尽可能快地输入代码。我只是无法连接到000webhost.com。我会的发帖。谢谢:)我正在使用网站提供的phpMyAdmin…您的脚本容易受到SQL注入的攻击。如果您编写了一些代码,请始终使用ctrl+k设置代码格式。“了解您的数据”:是的,但mysql.proc不是我们的数据(我花了很多时间才注意到…)运行
    mysql\u-upgrade-u root-p
    为我修复了我的数据库。谢谢。您可能需要--force标志。只是一个小提示。我必须使用sudo运行,即
    sudo-mysql\u-upgrade-uxxx-pxxx
    。否则我们会出现以下错误:
    无法在MariaDB服务器数据目录中创建升级信息文件“/var/lib/mysql/mysql\u-upgrade\u-info”,errno:13
    如果您使用的是最新版本的mariadb…comand是相同的,但使用的是maria…
    maria upgrade-u root-p
    100th upvote;)因为这对我也有效,所以我需要多做一步,就是修复mysql数据库的
    global_priv
    表,然后它允许我升级mysql。这对m也有效e当我将MySQL备份的数据导入MariaDB后,从MySQL 5.2迁移到MariaDB 10.3时。我试图通过双击来运行它,但我得到“无法执行二进制文件”。它对我有效。双击run from命令后重新启动MySQL表示不推荐使用MySQL\u升级。双击二进制文件非常有效。