Php 如果没有创建mysql表';不存在

Php 如果没有创建mysql表';不存在,php,mysql,Php,Mysql,我不怎么使用php/mysql,但我需要一个相对简单的任务:检查表是否存在,如果不存在,则创建它。我甚至无法获得有用的错误消息,数据库中也没有创建表。我的语法显然有问题 <?php session_start(); error_reporting(E_ALL); ini_set('display_errors', 1); // 1. CONNECT TO THE DB SERVER, confirm connection mysql_connec

我不怎么使用php/mysql,但我需要一个相对简单的任务:检查表是否存在,如果不存在,则创建它。我甚至无法获得有用的错误消息,数据库中也没有创建表。我的语法显然有问题

<?php

    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    // 1. CONNECT TO THE DB SERVER, confirm connection
    mysql_connect("localhost", "root", "") or die(mysql_error());
    echo "<p>Connected to MySQL</p>";
    $mysql_connexn = mysql_connect("localhost", "root", ""); // redundant ?

    // 2. CONNECT TO THE SPECIFIED DB, confirm connection
    $db = "weighttracker";
    mysql_select_db($db) or die(mysql_error());
    echo "<p>Connected to Database '$db'</p>";
    $db_connexn = mysql_select_db($db)or die(mysql_error("can\'t connect to $db"));

    // 3. if table doesn't exist, create it
    $table = "WEIGHIN_DATA";
    $query = "SELECT ID FROM " . $table;
    //$result = mysql_query($mysql_connexn, $query);
    $result = mysql_query($query, $mysql_connexn);

    if(empty($result)) {
        echo "<p>" . $table . " table does not exist</p>";
        $query = "CREATE TABLE IF NOT EXISTS WEIGHIN_DATA (
            id INT NOT NULL AUTO_INCREMENT,
            PRIMARY KEY(id),
            DATE    DATE NOT NULL,
            VALUE   SMALLINT(4) UNSIGNED NOT NULL
        )"
    }
    else {
        echo "<p>" . $table . "table exists</p>";
    } // else

?>
有几件事

缺少分号
中和结尾处“


不再支持
mysql.*
函数,它们已不再维护,将来也将继续使用。您应该使用或更新代码,以确保将来项目的功能。
$db=weighttracker;
$db=“weighttracker";
Plus,在查询中用反勾号包装
$table
,因为表名包含连字符。它表示你想做数学
weight-IN\u DATA
,它转换为
weight(减号)IN\u DATA)
。在打开
Oh之后,将错误报告添加到文件的顶部,并将变量切换为
result=mysql\u query($mysql\u connexn,$query)-在
mysql\uuuz
中,连接排在最后;不同于
mysqli\uquot
@Fred ii-Thx,我的$db打字错误Fred的提示。另外,为了简化,我抽了连字符。我还将查询改为Marcelo的版本,仍然没有乐趣;如果删除CREATE查询,至少可以确认我已连接到db,并且该表不存在,但CREATE查询将显示一个空白页。我将尝试编辑我的问题以显示当前状态你确定OP的代码没有其他错误吗?(我发现了很多)-另外,这意味着失败=>
称重数据
如果您想创建一个表(如果不存在),您应该使用“创建表(如果不存在)”,但首先您必须检查您的数据库连接。。可能错误是数据库的名称应该是字符串:$db=“weighttracker”;mysql_选择_db($db)或die(mysql_error());Thx@Marcelo。请看我编辑的问题,我已经应用了建议的更改,仍然没有成功,没有错误消息,只有空白页再次感谢。这起作用了。昨天是一个很大的挫折,因为我可以在SequelPro中创建表,但我固执地试图在php上下文中使其工作,而查询(正如我在其他地方发现的那样)根本不起作用。显然,语法上有很多变化,所以感谢大家对面向对象sql查询的了解,这对我来说是新的。干杯Shecky@user1613163非常欢迎你,谢基;我很高兴能提供帮助,干杯-享受编码:)@PhilipWhitehouse事实上Philip,分号是必要的,否则当它作为PHP执行时,它将抛出一个错误,例如
解析错误:语法错误,意外的“}”。我以为它是在谈论SQL语句的一个方面。:)
    CREATE TABLE IF NOT EXISTS WEIGH-IN_DATA (
        id INT NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(id),
        DATE    DATE NOT NULL,
        VALUE   SMALLINT(4) UNSIGNED NOT NULL )
if(empty($result)) {
    echo "<p>" . $table . " table does not exist</p>";
    $query = "CREATE TABLE IF NOT EXISTS WEIGHIN_DATA (
        id INT NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(id),
        DATE    DATE NOT NULL,
        VALUE   SMALLINT(4) UNSIGNED NOT NULL
    )" // <--- right there
<?php

session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);

$DB_HOST = "xxx"; // put your own data
$DB_NAME = "xxx"; // put your own data
$DB_USER = "xxx"; // put your own data
$DB_PASS = "xxx"; // put your own data


$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
  die('Connection failed [' . $conn->connect_error . ']');
}



/*

    // 1. CONNECT TO THE DB SERVER, confirm connection
    mysql_connect("localhost", "root", "") or die(mysql_error());
    echo "<p>Connected to MySQL</p>";
    $mysql_connexn = mysql_connect("localhost", "root", ""); // redundant ?


    // 2. CONNECT TO THE SPECIFIED DB, confirm connection
    $db = "weighttracker";
    mysql_select_db($db) or die(mysql_error());
    echo "<p>Connected to Database '$db'</p>";
    $db_connexn = mysql_select_db($db)or die(mysql_error("can\'t connect to $db"));

    // 3. if table doesn't exist, create it
    $table = "WEIGHIN_DATA";
    $query = "SELECT ID FROM " . $table; // that should be id and not ID
    //$result = mysql_query($mysql_connexn, $query);
    $result = mysql_query($query, $mysql_connexn);


*/


    $table = "WEIGHIN_DATA";
    $query = "SELECT ID FROM " . $table; // that should be id and not ID
    //$result = mysql_query($mysql_connexn, $query); // your original code
    // however connection comes last in mysql method, unlike mysqli
    $result = mysqli_query($conn,$query);


if(empty($result)) {
    echo "<p>" . $table . " table does not exist</p>";
    $query = mysqli_query($conn,"CREATE TABLE IF NOT EXISTS WEIGHIN_DATA (
        id INT NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(id),
        DATE    DATE NOT NULL,
        VALUE   SMALLINT(4) UNSIGNED NOT NULL
    )");
    }
    else {
        echo "<p>" . $table . "table exists</p>";
    } // else

?>