2017-01-18 50 views
3

我正在学习MySQL与PHP以及如何创建表格&插入数据。但我特别困惑的下面的代码:mysqli:为什么我需要'if'语句来创建表?

//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(); 

所以我复制并粘贴此代码,并在浏览器中运行它,然后检查本地主机/ phpMyAdmin的果然表已创建。

然而,我然后被删除的代码和只跑了第1节,(第2部分& 3被删除并且在该代码不存在的)假设这是所有我需要创建一个表。刷新我的浏览器后,我的数据库中没有创建表。

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

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

+0

第1只创建一个包含您的表定义,无非就是一个PHP串;它是对数据库执行该请求的第2部分。第2节是根据第1节定义的实际工作做什么 –

+1

特别是'$ conn-> query($ sql)'是实际执行查询的内容。 – cteski

+0

第1部分只是说明,第2部分将执行这些说明。这就像一个房子计划和房子建设,第1节只是一个计划,第2节建立这个计划......如果有帮助。 – samayo

回答

3

问题是不是,你缺少if ($conn->query($sql) === TRUE) { ... }问题是你缺少的$conn->query($sql)

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

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

+0

谢谢大家的帮助。我专门选择了你,因为我觉得我从你解释它的版本中得到了最多的理解。 – Shawn

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); 

然而,如果语句让你检查,如果查询是实际执行的,也就是说,如果你得到true,查询就被执行了,你知道,在桌子上创建,否则,你会得到一个错误$conn->error,你可以处理和看到,出了什么问题。

关闭连接,释放DB内存

//SECTION 3 
$conn->close(); 
相关问题