【问题标题】:Combining all INSERT statements into one将所有 INSERT 语句合并为一个
【发布时间】:2014-04-14 08:22:38
【问题描述】:

我正在为一个类创建一个页面,并且我有很多不同的 while 循环和很多不同的 INSERT 语句。直到我发现它们没有被正确输入之前,我认为这不会有问题。它们都被输入了,但发生的事情是它们都在单独的行中输入,而不是在它们的各个列中输入。我需要它,以便将所有 INSERT 语句合并为一个,同时仍然检查以确保数据库中还没有全名。请帮我重写我的代码,以便它可以做到这一点。

这是需要重写的代码,以便它只有一个 INSERT 语句:

<?php 
$con = mysql_connect("localhost","a7068104_user2","wiseguy1345");
if(!$con) {
    die("could not connect to localhost:" .mysql_error());
}

header("refresh:1.5; url=NamesAction.php");

mysql_select_db("a7068104_world") or die("Cannot connect to database");

$name = mysql_real_escape_string($_POST['firstname']);
$query = "SELECT * FROM names_1 WHERE firstname='$name'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0 ){
        echo "Your first name is already in the database and will not be added again!";
}
else {
        $query = "INSERT INTO names_1 (firstname) VALUES('$name')";
        $result = mysql_query($query);
        if($result) {
            echo "Your first name was successfully added to the database!";
        }
        else{
            echo "Your first name couldn't be added to the database!";
        }
}

$name = mysql_real_escape_string($_POST['lastname']);
$query = "SELECT * FROM names_1 WHERE lastname='$name'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0 ){
        echo "Your last name is already in the database and will not be added again!";
}
else {
        $query = "INSERT INTO names_1 (lastname) VALUES('$name')";
        $result = mysql_query($query);
        if($result) {
            echo "Your first name was successfully added to the database!";
        }
        else{
            echo "Your first name couldn't be added to the database!";
        }
}

$name = mysql_real_escape_string($_POST['firstname'] . " " . $_POST['lastname']);
$query = "SELECT * FROM names_1 WHERE fullname='$name'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0 ){
        echo "Your full name is already in the database and will not be added again!";
}
else {
        $query = "INSERT INTO names_1 (fullname) VALUES('$name')";
        $result = mysql_query($query);
}

$age = mysql_real_escape_string($_POST['age']);
    $query = "INSERT INTO names_1 (age) VALUES('$age')";
    $result = mysql_query($query);
    if($result) {
        echo "Your name was successfully added to the database!";
    }
    else {
        echo "Your name couldn't be added to the database!";
    }

mysql_close($con);
?>

<html>
<head>
    <link rel="stylesheet" href="Site.css">
    <?php include("Header.php"); ?>
    </div>
</head>

<body>
    <div id="main">
        <h1>Names</h1>
        <p>You will be redirected back to the <b>Names</b> page in a moment.</p>
        <?php include("Footer.php");?>
    </div>
</body>
</html>

【问题讨论】:

  • 你到底想做什么?单独检查一个人的名字/姓氏是否存在似乎是一个非常奇怪的设置。同时您坚持将它们存储在同一行?我有一种感觉,你在做一些数据库结构稍显不足的事情......说了你可以看看 REPLACE mysql 命令,它可能会解决你的直接问题:dev.mysql.com/doc/refman/5.0/en/replace.html
  • 我不需要更换任何东西。单独检查一个人的名字/姓氏是否存在是一个非常奇怪的设置。我只想做一次检查和一次插入。我可以向你保证,我的数据库结构正确,只是我的代码写得相当糟糕。
  • 如果您有 2 个人的名字或姓氏相同 - 即。 (约翰史密斯,约翰詹姆斯),(吉尔琼斯 / 山姆琼斯)。您的前 2 个查询将找到匹配项,您在哪一行插入全名?
  • 这甚至不相关。我根据名字和姓氏输入全名,我想在输入名字和姓氏的同一行中输入它。不知道是我说的不清楚还是怎么的。也只是为了清理东西,我只想检查全名是否是唯一的。我将在帖子中进行编辑。

标签: php html mysql sql web


【解决方案1】:

当插入包含多列的行时,您可以像这样组合两组键和值:

INSERT INTO names_1 (firstname, lastname) VALUES ('John', 'Smith')

另一种选择是在您的数据库中将 Firstname 和 Lastname 都标记为 Unique 列。然后您可以执行以下操作。

INSERT INTO names_1 (firstname, lastname) VALUES ('John', 'Smith') ON DUPLICATE KEY UPDATE names_1 SET x="blah" WHERE blah

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

【讨论】:

  • 谢谢!我真的很感激!
【解决方案2】:

这应该会完成你打算做的事情。

<?php 
$con = mysql_connect("localhost","a7068104_user2","wiseguy1345");
if(!$con) {
    die("could not connect to localhost:" .mysql_error());
}

header("refresh:1.5; url=NamesAction.php");

mysql_select_db("a7068104_world") or die("Cannot connect to database");

$fullname = mysql_real_escape_string($_POST['firstname'] . " " . $_POST['lastname']);
$query = "SELECT * FROM names_1 WHERE fullname='" . $fullname . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0 ){
        echo "Your full name is already in the database and will not be added again!";
}
else {
    $query = "INSERT INTO names_1 (firstname, lastname, fullname, age) VALUES('" .     $_POST['firstname'] . "','" . $_POST['lastname'] . "','" . $fullname . "'," . $_POST['age'] . ")";
    $result = mysql_query($query);
}


mysql_close($con);
?>

<html>
    <head>
        <link rel="stylesheet" href="Site.css"/>
        <?php include("Header.php"); ?>

    </head>

    <body>
        <div id="main">
            <h1>Names</h1>
            <p>You will be redirected back to the <b>Names</b> page in a moment.</p>
            <?php include("Footer.php");?>
        </div>
    </body>
</html>

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2019-07-22
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多