提问人:Gisbert12843 提问时间:11/25/2022 更新时间:11/26/2022 访问量:216
php 无法在 mariadb 数据库中选择或插入表数据(未捕获mysqli_sql_exception:引擎中不存在表“X”) [已关闭]
php can't Select or Insert table data inside mariadb database ( Uncaught mysqli_sql_exception: Table 'X' doesn't exist in engine ) [closed]
问:
我正在做一个更大的项目,它通过 xampp 和 mariaDB 以及一个更大的项目安装一个 php 解释器,其中包含一个数据库和一些 php 文件在一个空白的 windows 10 系统上。
到目前为止,我已经运行了所有内容,PHP服务器正在命令上运行,并且MariaDB服务器似乎也可以访问。
我面临的问题在于,我们的项目(在 phpstorm 下并通过另一个系统上的命令行完美运行)似乎没有检索此 VM 中数据库的表数据。
来自php内部的连接正在工作,数据库本身也被识别。我通过这样打印它来检查它:
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "toor";
$dbname = "emensawerbeseite";
$dbport = "42069";
$link= mysqli_connect ($dbhost, $dbuser, $dbpass,$dbname,$dbport);
if(! $link ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully</br>';
$link->set_charset("utf8"); //enables the good old äüö's
$db_list = mysqli_query($link, "SHOW DATABASES"); //mysqli
while ($row = mysqli_fetch_object($db_list)) {
echo $row->Database . "</br>";
}
这会给我打印以下输出:
我还可以列出所有表列名称。
数据库本身我刚刚复制到 mariadb 的数据文件夹中。 它保留了与我的工作版本相同的 .frm 和 .ibd 和 .opt 文件。
当我尝试从数据库中插入或检索任何类型的实际数据时,问题就出在了这里。
$sql2 = "insert into gericht (id, name, beschreibung, erfasst_am, vegetarisch, vegan, preis_intern, preis_extern) values (22, 'CCurrywurst mit Pommes', '', '2022-11-14', false, false, 4.20, 6.90)";
if ($link->query($sql2) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql2 . "<br>" . $link->error;
}
此时出现以下错误:
“致命错误:未捕获mysqli_sql_exception:C:\xampp\php\index.php:43 堆栈跟踪:#0 C:\xampp\php\index.php(43):mysqli->query('插入 ger...') 中的引擎中不存在表'emensawerbeseite.gericht')#1 {main} 在第 43 行扔进 C:\xampp\php\index.php”
这实际上意味着什么?
我能做些什么呢? 一些帖子建议重新启动或其他不起作用的事情。
答:
"Table 'emensawerbeseite.gericht' doesn't exist in engine"
这意味着您的数据库已损坏。对于 InnoDB,字典 (ibdata1) 不包含有关表的信息或根本不包含。gericht
评论
The database itself I just Copied in the data folder of mariadb.
...这实际上不是推荐或支持的还原数据库的方法。仅此一项就可能导致某种形式的腐败。仅仅因为该表列在信息架构中并不一定意味着它实际上存在于现实中。如果使用不受支持的方法复制数据库,则无法保证它能够正常工作。以正确的方式读取 mariadb.com/kb/en/backup-and-restore-overview 并迁移数据库。然后看看你是否还有问题。mysqli_error()
需要一个参数。请考虑改为打开错误模式。如何在MySQLi中获取错误消息?