2017-09-21 55 views
-1

現在掙扎一天。需要在PHP中創建數據庫(如果不存在),並確保它是空的(如果已經存在)。但不知何故,我可能會錯過一些重要的東西,什麼也沒有發生看起來它只是完全跳過創建和刪除部分。PHP不會創建數據庫

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

//Database variables 
$servername = "localhost"; 
$username = "Somename"; 
$password = "Verysecret"; 
$dbname = "TESTDB"; 
$temptable = "tablename"; 

//Open database 
$conn = new mysqli($servername, $username, $password,$dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully to database: ",$dbname,"<br>" ; 
?><br><?php 

//Create table if not existing yet (syntax error here?) 
echo "Creating table if non existing","<br>"; 
$conn->select_db('$dbname'); 
$sql = "CREATE TABLE IF NON EXIST `{$temptable}` (
`xml_date` datetime, 
`xml_duration` int(2), 
`xml_boat` VARCHAR(30), 
`xml_itinerary` VARCHAR(30), 
`xml_dep_arr` VARCHAR(30), 
`xml_spaces` INT(2), 
`xml_rate_eur` decimal(4,2), 
`xml_rate_gbp` decimal(4,2), 
`xml_rate_usd` decimal(4,2))"; 

//This part not showing up in output at all! 
if(mysqli_query($conn, $sql)){ 
    echo "Table created successfully"; 
    } else { 
     echo "Table is not created successfully "; 
    } 

//Deleting rows if table existed already (same syntax error here?) 
echo "Making sure table is empty","<br>"; 
$sql = "DELETE * FROM `{$temptable}`"; 

mysqli_close($conn); 

?> 

我看到,當我運行(與MAMP Localy)是:

成功連接到 數據庫:TESTDB

創建表,如果不存在的,確保表是空的

數據庫沒有創建,當我在SequelPro中自己創建它並添加一些行時。

幫助,現在搜索一天!我究竟做錯了什麼?迷失在引號中,回覆引號,雙引號?監督顯而易見的?

+0

'DELETE *'噸帽子的無效加上你還沒有執行它。 –

+0

echo $ sql並在db中運行它,您可能會得到詳細錯誤 – user1844933

+0

CREATE TABLE IF NON EXIST'不正確的語法。請參閱https://dev.mysql.com/doc/refman/5.7/en/create-table.html –

回答

2

讓我們重複您在此處使用的內容。

DELETE *無效,因爲星號用於SELECT而不是DELETE

基本語法是DELETE FROM TABLE WHERE col_x = ?(可選WHERE子句)。

例子:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name 
    [PARTITION (partition_name [, partition_name] ...)] 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

你創建表的語法不正確,基本的語法是:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 
    (create_definition,...) 
    [table_options] 
    [partition_options] 

按文檔。

它使用關鍵字IF NOT EXISTS,而不是你的IF NON EXIST

您也沒有執行DELETE查詢。

,並檢查錯誤上也:

此外,克里斯是太好的評論指出,變量不會被單引號解析。

無論是從$conn->select_db('$dbname');刪除它們在任何

  • $conn->select_db($dbname);

或設置在雙引號:

  • $conn->select_db("$dbname");

編輯:

如果這裏的目標是擺脫表的全部(後看到你的DELETE查詢),那麼這兩個DELETETRUNCATE是不是你要在這裏幹什麼用的,但DROP TABLE

查閱文檔:

基本例如:

DROP [TEMPORARY] TABLE [IF EXISTS] 
    tbl_name [, tbl_name] ... 
    [RESTRICT | CASCADE] 
+0

@ chris85 Ohhhhhh是的,很好的抓克里斯感謝;我會編輯。 –

+0

@ chris85謝謝克里斯,請保持您的評論完整無缺,我已經對答案進行了編輯並引用了您的評論。由於某種原因我逃避了。編輯:哦,你刪除了你的評論我回應。我只是保留這些「備案」;-) –

+0

感謝弗雷德,我的錯誤藉口是短時間(兩週)我試圖圍繞PHP我的頭。我想我希望能在這個網站上找到答案,但我現在意識到一些複製粘貼解決方案只會使問題更加嚴重。迫切需要找到一些關於最新代碼的良好文檔,以便我的頭腦中的雲實現知識。 – John

-1

試試這個,我得到了表中創建

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

//Database variables 
$servername = "localhost"; 
$username = "detecttn_user"; 
$password = "Azer12345"; 
$dbname = "detecttn_teststack"; 
$temptable = "test "; 

//Open database 
$conn = new mysqli($servername, $username, $password,$dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully to database: $dbname <br>" ; 
?><br><?php 

//Create table if not existing yet (syntax error here?) 
echo "Creating table if non existing","<br>"; 

    $sql ="SHOW TABLES LIKE '$temptable'"; 
if(mysqli_query($conn, $sql)){ 
    echo "Table exist"; 
    } else { 
     echo "Table does not exist"; 
     // if table not exist create it 
     $sql = "CREATE TABLE IF NOT EXISTS $temptable (
`xml_date` datetime, 
`xml_duration` int(2), 
`xml_boat` VARCHAR(30), 
`xml_itinerary` VARCHAR(30), 
`xml_dep_arr` VARCHAR(30), 
`xml_spaces` INT(2), 
`xml_rate_eur` decimal(4,2), 
`xml_rate_gbp` decimal(4,2), 
`xml_rate_usd` decimal(4,2))"; 
mysqli_query($conn, $sql); 

$sql ="SHOW TABLES LIKE '$temptable'"; 
if(mysqli_query($conn, $sql)){ 
    echo "Table created"; 
    } else { 
     echo "Table creation failed"; 
    } 
    } 

//Deleting rows if table existed already (same syntax error here?) 
echo "Making sure table is empty","<br>"; 
$sql2 = "TRUNCATE TABLE $temptable"; 
if(mysqli_query($conn, $sql2)){ 
    echo "Table is empty"; 
    } else { 
     echo "Error"; 
    } 
mysqli_close($conn); 

?> 
+1

刪除*是錯誤的語法 – Akintunde007

+0

是的,但它是一個無用的行(未執行) –

+0

是的sql變量未執行。但請通知OP。 – Akintunde007