2017-01-18 7 views
3

私はPHPでMySQLを学習しており、テーブルを作成するには&データを挿入します。しかし、私は次のコードについて混乱特に午前: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のと表が作成された十分な確認を確認しました。

しかし、これは私がテーブルを作成するために必要なすべてであったと仮定すると、私は、コードを削除し、のみSECTION 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を呼び出すと、2行に分けるのではなく、1行でその戻り値をチェックして実行しています。

したがって、if文を実行しない場合でも、$conn->query($sql)をそれ自身の行で実行する必要があります。

+0

皆さん、ありがとうございました。私はあなたのバージョンを説明するのが最も分かりやすいと思ったので、私はあなたを選んだのです。 – Shawn

1

は私はあなたのコードを説明しましょう。ここでは

あなたが唯一の変数$ SQLにSQLクエリに似た文字列を割り当てます。

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

あなたはが必要 AN if文、あなただけ行うことができません:しかし、もし

//SECTION 2 
$conn->query($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スクリプトを実行する必要がありますクエリが実際に実行されたかどうかを確認できます。つまり、がtrueの場合は、クエリが実行され、テーブルが作成されました。そうでないと、エラーが発生しました。処理して参照できるエラーは$conn->errorです。何が問題になりましたか。接続を閉じる

は、DBのメモリを解放する

//SECTION 3 
$conn->close(); 
関連する問題