PHP不创建数据库
挣扎了一天。需要用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
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”进行检查。