2017-01-18 82 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(); 
相關問題