我正在尝试从W3schools学习php,其中包括一个mysql部分。到目前为止,我已经完成了w3school教程的其他部分,除了从数据库表打印内容的部分。出于一些非常奇怪的原因,我运行代码时没有显示任何内容。请问我怎么能让这个工作起来,我的问题可能来自于我使用带有Xampp而不是Mysql的MariaDB,尽管他们说它实际上是相同的语法。 这是代码
<?php
$servername = "localhost";
$username = "uhexos";
$password = "strongpassword";
$database = "fruitdb";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create database
$sql = "CREATE DATABASE fruitDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
// Create connection
$conn = mysqli_connect($servername, $username, $password,$database);
// sql to create table
$complexquery = "CREATE TABLE MyFruits (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
FruitType VARCHAR(30) NOT NULL,
FruitTaste VARCHAR(30) NOT NULL,
FruitQuantity INT NOT NULL,
DatePurchased TIMESTAMP
)";
if ($conn->query($complexquery) === TRUE) {
echo "Table Fruits created successfully<br> ";
} else {
echo "Error creating table: " . $conn->error;
}
$entry = "INSERT INTO myfruits (fruittype,fruittaste,fruitquantity) VALUES ('orange','sweet','50'),('lemon','sour','10'),('banana','sweet','15')";
if ($conn->query($entry) === TRUE) {
echo "New records created successfully";
} else {
echo "Error: " . $conn->error;
}
$sql = 'SELECT id, fruitname, fruittaste FROM myfruits';
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "EMP ID :{$row['id']} <br> ".
"EMP NAME : {$row['fruitname']} <br> ".
"EMP SALARY : {$row['fruittaste']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
这是我从所有回声中得到的输出。
Error creating database: Can't create database 'fruitdb'; database existsError creating table: Table 'myfruits' already existsNew records created successfully
或
Database created successfullyTable Fruits created successfully
New records created successfully
答案 0 :(得分:1)
根据错误消息,您设法创建数据库和表一次,现在每次运行代码时都会失败,因为您无法重用这些名称。
你绝对不想让代码试图擦除&amp;每次都在数据库上重新开始。事实上,我经常发现你甚至不在常规代码中创建数据库,而是使用phpMyAdmin或其他一些管理页面来做到这一点。但是在代码中创建表是正常的。两个选项:
1 - 仅在表尚不存在时创建表。这非常安全。但是,如果你想用新结构重新开始一个表,或者从它开始一直空着,那就不行了。为此,只需将CREATE TABLE
更改为CREATE TABLE IF NOT EXISTS
2 - 在创建表之前删除表。在每个CREATE TABLE
命令之前,添加DELETE TABLE IF EXISTS MyFruits
答案 1 :(得分:0)
记住数据库名称不区分大小写,因此创建数据库名称“fruitdb”或“fruitDb”是否相同并不重要。这就是您收到错误的原因。此外,您不必在执行任何文件时创建新数据库。如果您已经创建了数据库,那么您只能与它建立连接。 让我们逐行调试你的代码。
第8行 -
// Create connection
$conn = new mysqli($servername, $username, $password);
您正在创建与数据库的连接,因为您已经创建了该数据库。如果你检查你的phpmyadmin,你会找到一个名为“fruitdb”的数据库
第10行 -
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
在此检查您是否能够连接数据库。如果不是,它将抛出错误,您的脚本将停止。现在你的代码成功运行到这一点。
第15行 -
// Create database
$sql = "CREATE DATABASE fruitDB";
在这里,您将再次创建一个具有相同名称的数据库,并且您的代码将停止工作。
答案 2 :(得分:0)
错误来自这条线 $ sql ='SELECT id,fruitname,fruittaste FROM myfruits';
我不小心放了fruitname而不是fruittype,这就是导致它失败的原因。所以对于有这个问题的其他人,我的建议是检查你的变量名称,如果你100%确定你的语法。谢谢你的帮助。