mysqli:为什么我需要一个' if'声明创建表?

时间:2017-01-18 19:12:55

标签: php mysql mysqli

我正在使用PHP学习MySQL以及如何创建表格和插入数据。但我对以下代码感到特别困惑:

//SECTION 1
$sql = "CREATE TABLE ingredients (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
quanity INT(6) NOT NULL,
package INT(6) NOT NULL,
item VARCHAR(50),
cost DECIMAL(18,2),
store VARCHAR(50),
reg_date TIMESTAMP
)";

//SECTION 2
if ($conn->query($sql) === TRUE) {
    echo "Table ingredients created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

//SECTION 3
$conn->close();

所以我复制并粘贴了这段代码并在我的浏览器中运行,然后检查了localhost / phpmyadmin,确定已经创建了TABLE。

然而,我随后删除了代码并且仅运行了第1部分,(第2部分和第3部分已被删除且代码中不存在),假设这是我创建表所需的全部内容。刷新浏览器后,我的数据库中没有创建表。

所以我又看了一眼并想了想,可能是因为我没有关闭连接。所以这次我插入了第1节&第3节并省略了第2节。

这也没有令我惊讶的创建表。所以这就是我感到困惑的地方。为什么我需要第2节?据我所知,它只能打印出一个字符串,这对我或任何创建表格的用户来说只是一个小小的通知,但它在制作表格时似乎并不重要。那么,为什么我不能创建没有它的表?我很困惑!

2 个答案:

答案 0 :(得分:3)

问题是您缺少if ($conn->query($sql) === TRUE) { ... }问题是您缺少$conn->query($sql)

$conn->query($sql)是一个函数,如果成功则返回TRUE。通过在此函数上调用if,您既可以运行它并在一行中检查其返回值,而不是将它们分成两行。

因此,即使您不想运行if语句,仍需要在自己的行上运行$conn->query($sql)

答案 1 :(得分:1)

让我解释一下你的代码:

在这里,您只需将类似SQL查询的字符串分配给变量 $ sql

//SECTION 1
$sql = "CREATE TABLE ingredients (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
quanity INT(6) NOT NULL,
package INT(6) NOT NULL,
item VARCHAR(50),
cost DECIMAL(18,2),
store VARCHAR(50),
reg_date TIMESTAMP
)";

现在您需要执行SQL脚本:

//SECTION 2
if ($conn->query($sql) === TRUE) {
    echo "Table ingredients created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

您不会需要 if语句,您只能这样做:

//SECTION 2
$conn->query($sql);

然而,if语句让你检查,如果查询实际执行,意味着,如果你得到 true ,查询就被执行了,你知道,表是创建的,否则,你得到一个错误$conn->error,您可以处理并查看错误。

关闭连接,释放数据库内存

//SECTION 3
$conn->close();