others - mysql.proc的php列计数错误 Expected 20, found 16. 数据表可能损坏了

  显示原文与译文双语对照的内容

我正在使用 000 webhost.com,并且我还在使用 phpMyAdmin 。 当我运行我的PHP脚本时,我从MySQL收到此错误,如标题所示:

Column count of mysql.proc is wrong. Expected 20, found 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



另外,通过运行以下命令重新启动


service mysqld restart



错误升级完成时发生这个错误。 例如,如果从5.0升级到5.1,但是,不运行mysql_upgrade脚本,就会发生这种情况;或者在极少数情况下如果你直接从5.0升级到5.5,可能会发生这种情况 。 (许多人这样做,但这种更新并没有得到官方支持)你说你正在使用托管服务 - 好吧,我认为你应该创建一张工单并告诉他们这个问题。 如果你没有超级权限,你就什么也做不了。 但是,如果你有这样的权限,只要运行 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 leveldeep而不是 2

mysql_upgrade解决方案可以很好地解决这个问题,但是,简单的解决方案是了解你的数据,并且使用正确。

我在 Debian 8 (jessie)中将mysql服务器从5.5更新到5.7时出现了同样的问题, 在我的例子中,执行以下命令时效果很好:


mysql_upgrade --force -uroot -p



希望能帮你

...