我使用000webhost.com和我使用phpMyAdmin那里。当我运行PHP脚本时,我从MySQL得到这个错误,标题说:
mysql的列数。进程是错误的。预期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
当我在MacOS Mohave中将XAMPP从XAMPP -osx-7.2.10更新到7.3.9时,我遇到了同样的问题。所以解决方案是:
找到文件mysql_upgrade"Macintosh高清▸应用▸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
问题解决了
Credits: XAMPP中似乎有一个bug - https://community.apachefriends.org/f/viewtopic.php?f=17&t=78386&sid=3d3824dd0b6aa2e33c3adc73c744b4b4
这个错误发生在错误的升级完成时。例如,如果你从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
我在Debian 8 (jessie)中将mysql服务器从5.5升级到5.7时也遇到了同样的问题。在我的例子中,当我执行以下命令时,它工作得很好:
mysql_upgrade --force -uroot -p
我在Ubuntu 20.04上使用xampp,我的问题是返回相同的消息错误,用这个解决方案解决了:
- 进入xampp目录:cd/opt/lampp/进入bin目录:cd bin
- 执行脚本:sudo ./mysql_upgrade
credit: https://askubuntu.com/questions/1171409/how-to-run-mysql-upgrade-when-using-xampp
虽然你关于升级的必要性可能是正确的,但这并不是发生此错误的唯一原因。
当使用返回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。白色
我当时使用的是windows 10系统,我的解决方案是Mysql_upgrade -u root -p
但是你需要确保mysql_upgrade脚本的路径,它存在于你的安装目录的mysql/bin文件夹中,需要在环境变量路径中添加这个命令才能工作
在命令
下面点击浏览器/opt/lampp/bin/mysql_upgrade
为Linux
如果你使用的是LAMPP,那么你可以像-
sudo /opt/lampp/lampp start
/opt/lampp/bin/mysql_upgrade
else如果mysql是单独安装的,那么你可以像这样-
mysql_upgrade -u root -p
service mysqld restart
对于任何其他操作系统,您可以简单地进入bin目录的lamp安装&;尝试找到mysql_upgrade文件&执行它。
这种情况发生在升级而不是迁移;
读取version check failed
的部分是相关部分:
Version check failed. Got the following error when calling the 'mysql' command line client
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
FATAL ERROR: Upgrade failed
显然这是一个不兼容的客户端版本,但mysql
数据库也不同。
这将是mysql.proc
表的当前定义…这表明自MariaDB 10.3.3以来,枚举列type
已更改,列aggregate
已添加。
还有一个问题是:
在MariaDB 10.4及更高版本中,该表使用Aria存储引擎。
将服务器降级为5。删除InnoDB日志文件,然后恢复表proc
;(适用于MariaDB 5.x): https://github.com/google/mysql/blob/master/scripts/mysql_system_tables.sql
对于我来说,这个问题是由在COUNT()
前面意外地添加表别名前缀引起的:
MariaDB> SELECT x.COUNT(1) FROM (SELECT 1) AS x;
ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 21, found 20. Created with MariaDB 100137, now running 100334. Please use mysql_upgrade to fix this error
MariaDB> SELECT COUNT(1) FROM (SELECT 1) AS x;
+-------------+
| COUNT(test) |
+-------------+
| 1 |
+-------------+
1 row in set (0.001 sec)
如您所见,没有COUNT()
之前的前缀,它可以工作。我将表别名添加到所有SELECT字段,因此,意外地也添加到COUNT()
之前。这是否会在一个新的数据库上给出一个不同的错误消息,我不知道,但服务器已经运行多年,通过修复查询错误消失了,所以…对我来说,这似乎是一个运行时/语法错误,而不是像这个线程中的其他人那样的升级/重启问题。
您可以在Linux中使用它sudo/opt/lampp/bin/mysql_upgrade