PHP没有创建数据库

时间:2017-09-21 18:43:20

标签: php sql mysqli

现在苦苦挣扎了一天。需要在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); 

?>

当我跑步时(Localy with Mamp),我所看到的只有:

  

成功连接到   数据库:TESTDB

     

如果不存在则创建表确保表为空

我之前在SequelPro中自己创建数据库并添加一些行时,不会创建数据库。

帮助,现在搜索一天!我究竟做错了什么?报价,报价,双引号丢失?监督明显的?

2 个答案:

答案 0 :(得分: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都不是你想在这里使用的,而是{{1 }}

参考文档:

基本示例:

DROP TABLE

答案 1 :(得分:-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); 

?>