为什么不创造辛普森一家的表?

时间:2010-11-08 13:32:26

标签: php mysql

这是PHP代码,作为另一个只包含表单的HTML页面的“动作”。

它没有显示任何错误,在我点击提交后出现“数据库创建”消息,但它没有创建表'辛普森一家'。为什么会这样?

请告诉我是否应该提供更多详细信息或评论代码。

<?php

$database = 'basedados';
$username = 'root';
$password = '';

$first = $_POST['first'];
$last = $_POST['last'];
$phone = $_POST['phone'];
$mobile = $_POST['mobile'];
$fax = $_POST['fax'];
$email = $_POST['email'];
$web = $_POST['web'];

$con = mysql_connect(localhost, $username, $password);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (mysql_query("CREATE DATABASE IF NOT EXISTS $database", $con)) {
    echo "Database created";
} else {
    echo "Error creating database: " . mysql_error();
}

mysql_select_db($database, $con);
$create_table = "CREATE TABLE Simpsons
                (
                first varchar(15),
                last varchar(15),
                phone varchar,
                mobile varchar,
                fax varchar,
                email varchar,
                web varchar,
                )";
$insert_values = "INSERT INTO Simpsons VALUES ($first','$last','$phone','$mobile','$fax','$email','$web')";
if (table_exists(Simpsons, $database)) {
    mysql_select_db($database) or die("Unable to select database");
    mysql_query($insert_values, $con);
} else {
    mysql_select_db($database) or die("Unable to select database");
    mysql_query($create_table, $con);
    mysql_query($insert_values, $con);
}

function table_exists($table, $db) {
    $tables = mysql_list_tables($db);
    while (list ($temp) = mysql_fetch_array($tables)) {
        if ($temp == $table) {
            return TRUE;
        }
    }
    return FALSE;
}

mysql_close($con);
?>

更新

确定。谢谢你们。现在我的代码看起来更像是这样:

<?php

$database = 'basedados';
$username = 'root';
$password = '';

$first = $_POST['first'];
$last = $_POST['last'];
$phone = $_POST['phone'];
$mobile = $_POST['mobile'];
$fax = $_POST['fax'];
$email = $_POST['email'];
$web = $_POST['web'];

$con = mysql_connect(localhost, $username, $password);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (mysql_query("CREATE DATABASE IF NOT EXISTS $database", $con)) {
    echo "Database created";
} else {
    echo "Error creating database: " . mysql_error();
}

$create_table = "CREATE TABLE IF NOT EXISTS simpsons
                (
                first varchar(15),
                last varchar(15),
                phone varchar(15),
                mobile varchar(15),
                fax varchar(15),
                email varchar(15),
                web varchar(15)
                )";
$insert_values = "INSERT INTO simpsons VALUES ('$first','$last','$phone','$mobile','$fax','$email','$web')";

mysql_select_db($database, $con) or die("Unable to select database: " . mysql_error());
mysql_query($create_table, $con) or die("Error creating table: " . mysql_error());
mysql_query($insert_values, $con) or die("Error inserting values: " . mysql_error());
mysql_close($con);
?>

我觉得它看起来更干净,虽然我不确定我是否正确使用mysql_error()功能。 再次感谢你。

4 个答案:

答案 0 :(得分:4)

一个逗号,你需要指定varchar-fields的长度

CREATE TABLE Simpsons
            (
            first varchar(15),
            last varchar(15),
            phone varchar(xx),
            mobile varchar(xx),
            fax varchar(xx),
            email varchar(xx),
            web varchar(xx)
            )

答案 1 :(得分:4)

在$ first之前,您的表中缺少一条引号:

INSERT INTO Simpsons VALUES ($first','$last','$phone','$mobile','$fax','$email','$web')

但说实话,如果没有好的错误报告,很难定义哪些内容是代码中的错误,哪些是帖子中的拼写错误。

BTW:看看http://nl2.php.net/manual/en/function.mysql-escape-string.php

答案 2 :(得分:1)

为什么在拨打mysql_select_db($database)之前只有几行就致电mysql_select_db($database, $con)我会放弃它。

不是答案,而是重构建议我无法评论:

if (table_exists(Simpsons, $database)) {
    mysql_select_db($database) or die("Unable to select database");
    mysql_query($insert_values, $con);
} else {
    mysql_select_db($database) or die("Unable to select database");
    mysql_query($create_table, $con);
    mysql_query($insert_values, $con);
}

可能会变成

// connect statement dropped
if (!table_exists(Simpsons, $database)) {
    mysql_query($create_table, $con);
}
mysql_query($insert_values, $con);
通过修改您的创建查询的第一行来阅读CREATE TABLE Simpsons IF NOT EXISTS并将以上行替换为:

,甚至完全取消

mysql_query($create_table, $con);
mysql_query($insert_values, $con);

答案 3 :(得分:0)

如果您不知道如何使用mysql_error,可能首先尝试通过cli或phpmyadmin执行此代码(请参阅页面上的示例,非常简单)