PHP不创建数据库

PHP不创建数据库,php,sql,mysqli,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 =

挣扎了一天。需要用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在本地)时,我看到的是:

已成功连接到 数据库:TESTDB

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

当我在SequelPro中自己创建数据库并添加一些行时,数据库没有创建


救命啊,现在搜索一天!我做错了什么?在引号中丢失,反引号,双引号?监督显而易见的东西?

让我们来重复一下您在这里使用的东西

DELETE*
无效,因为星号用于而不是
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]
根据文件

如果不存在,则使用关键字
,如果不存在,则不使用关键字

您也没有执行
DELETE
查询

并检查其上是否有错误:

另外,正如克里斯在评论中指出的那样;变量不能用单引号进行分析

$conn->select_db(“$dbname”)中删除它们如在

  • $conn->select_db($dbname)
或设置为双引号:

  • $conn->select_db(“$dbname”)
编辑:

如果此处的目标是完全删除表(在看到删除查询之后),那么
DELETE
TRUNCATE
都不是您想要在此处使用的,而是
DROP table

请参阅以下文档:

基本示例:

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

试试这个,我创建了表

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

?>


DELETE*
这是无效的,而且您还没有执行它。echo$sql并在db中运行它,如果不存在的
语法不正确,您可能会得到详细的错误
CREATE TABLE。查阅您的代码失败的级别太多。请仔细阅读官方文件。@chris85谢谢chris85,请保留您的评论,我已经对答案进行了编辑并引用了您的话;不知什么原因,我没有意识到这一点。编辑:哦,你删除了我回复的评论。我会把这些“记录在案”;-)谢谢Fred,我犯这些错误的借口是,我试图在很短的时间内(两周)将注意力集中在PHP上。我想我希望在这个网站上找到答案,但现在我意识到一些复制粘贴解决方案只会吸引这些问题。我迫切需要找到一些关于最新代码的好文档,这样我头脑中的云才会变成知识。是的,sql变量没有被执行。但请通知操作。更正的代码最有帮助。理解我的错误。都是。过于关注类似的解决方案,而不是适当的文档。关于一些好的在线文档的任何建议。从仍然提到过时语法的讨论中感到非常困惑。与我这样的新手不太相关。还有一件事,在实现代码时注意到了这一点。即使表格已经存在,也会显示“Table created successfully”(表格创建成功)行。可能与执行委员会的工作有关。如何仅在创建时和不创建时应用消息,例如MySQL中的“Table ready exist”@John“CREATE”命令不是返回值命令,因此它总是返回false(与SELECT不同)。要检查命令“CREATE”是否成功,可以在执行“CREATE”命令后使用“showtables”进行检查。