【问题标题】:What's wrong with my SQL query?我的 SQL 查询有什么问题?
【发布时间】:2010-12-23 03:05:10
【问题描述】:

我需要快速查看一下我的 SQL 查询。已经让我头疼了。比较我得到的一些建议,我无法为我的 SQL 找出正确的格式。

这是我的代码:

$query = "INSERT INTO `[my_db_name]`.`members` (`id` ,`first` ,`last` ,`add1` ,`add2` ,`phone_home` ,`phone_cell` ,`phone_dad` ,`phone_mom` ,`email1` ,`email2`)
    VALUES ('NULL' , '".$first."', '".$last."', '".$add1."', '".$add2."', '".$phone_home."', '".$phone_cell."', '".$phone_dad."', '".$phone_mom."', '".$email1."', '".$email2."')";

`mysql_query($query) or die ('Error updating database, Error:' . mysql_error());

提前致谢!

编辑:

目前我有这个形式:

<table border="0" cellpadding="0" cellspacing="0">

            <form  enctype="multipart/form-data" method="POST" action="add-member.php">

            <tr class="labels">

                <td class="f">Add a Member</td>
                <td class="l"></td>

            </tr>

            <tr>

                <td class="f"><label for="first">First Name:</label></td>
                <td class="l"><input id="first" type="text"/></td>

            </tr>


            <tr>

                <td class="f"><label for="last">Last Name:</label></td>
                <td class="l"><input id="last" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="add1">Address 1:</label></td>
                <td class="l"><input id="add1" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="add2">Address 2:</label></td>
                <td class="l"><input id="add2" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="phone_home">Home Phone:</label></td>
                <td class="l"><input id="phone_home" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="phone_cell">Cell Phone:</label></td>
                <td class="l"><input id="phone_cell" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="phone_dad">Dad Cell:</label></td>
                <td class="l"><input id="phone_dad" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="phone_mom">Mom Cell:</label></td>
                <td class="l"><input id="phone_mom" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="email1">Email 1:</label></td>
                <td class="l"><input id="email1" type="text"/></td>

            </tr>

            <tr>

                <td class="f"><label for="email2">Email 2:</label></td>
                <td class="l"><input id="email2" type="text"/></td>

            </tr>

        </table>

这是插入查询:

<?php

    $first = $_POST['first'];
    $last = $_POST['last'];
    $add1 = $_POST['add1'];
    $add2 = $_POST['add2'];
    $phone_home = $_POST['phone_home'];
    $phone_cell = $_POST['phone_cell'];
    $phone_dad = $_POST['phone_dad'];
    $phone_mom = $_POST['phone_mom'];
    $email1 = $_POST['email1'];
    $email2 = $_POST['email2'];

    include ("../lib/login.php");

    mysql_connect($hostname, $username, $password)
     or die("Unable to connect to MySQL");

    mysql_select_db ([dbname]);

    $query = "INSERT INTO `[dbname]`.`mem_dir` (`id` ,`first` ,`last` ,`add1` ,`add2` ,`phone_home` ,`phone_cell` ,`phone_dad` ,`phone_mom` ,`email1` ,`email2`)
            VALUES (NULL , '$first', '$last', '$add1', '$add2', '$phone_home', '$phone_cell', '$phone_dad', '$phone_mom', '$email1', '$email2')";

    mysql_query($query) or die ('Error updating database, Error:' . mysql_error());

    echo "Database successfully uploaded with:<br/><ul>
    <li>" . $first . "</li>
    ...
    </ul>";

?>

似乎提交了条目,但没有提交值...我厌倦了看着它而不是看到它。我感谢所有的帮助。谢谢!

编辑(再次):

正如Salman A 所指出的,问题实际上出在表单上,​​而且每个输入都用“id”而不是“name”标识。

谢谢大家,非常感谢大家的帮助!我猜我不正确的 SQL 格式是另一个话题吧?

【问题讨论】:

  • 同意;除非你的表名中有 '[' 和 ']',否则这在 MySQL 中是行不通的。
  • 如果您指的是 [my_db_name],我的 SQL 中实际上并没有这个,只是在这里显示。
  • 表名和列名不应该有引号(尤其是反引号)。关键字 NULL 也不应该。
  • 删除了表和数据库名称周围的引号,但结果仍然相同。不过感谢您的建议。
  • echo $query; 给你什么?

标签: php sql mysql


【解决方案1】:

它有气味的形式!全部更改:

<input id="yadayada">

收件人:

<input name="yadayada">
<!--   ^^^^---- you must use the name attribute -->

可选:

  • 表单标签放错了位置;我建议你把&lt;table&gt; 放在&lt;form&gt; 里面,而不是反过来。
  • 我没有看到&lt;/form&gt;&lt;input type="submit"&gt;
  • 除非您上传文件,否则您不需要multipart/form-data 编码。

【讨论】:

  • 非常感谢!!!我不敢相信我放的是身份证而不是名字!我很高兴 StackOverflow 使这成为可能。再次感谢!
【解决方案2】:

NULL 不应被引用。

您可以简化值列表(因为这似乎是 PHP):

VALUES (NULL , '$first', '$last', '$add1', '$add2', '$phone_home', '$phone_cell', '$phone_dad', '$phone_mom', '$email1', '$email2')";

【讨论】:

    【解决方案3】:

    NULL 值没有被转义,这就是问题所在(如果相对 SQL 值真的是 NULL,而不是字符串“NULL”)

    $query = "INSERT INTO `[my_db_name]`.`members` (`id` ,`first` ,`last` ,`add1` ,`add2` ,`phone_home` ,`phone_cell` ,`phone_dad` ,`phone_mom` ,`email1` ,`email2`)
        VALUES (NULL , '".$first."', '".$last."', '".$add1."', '".$add2."', '".$phone_home."', '".$phone_cell."', '".$phone_dad."', '".$phone_mom."', '".$email1."', '".$email2."')";
    

    【讨论】:

      【解决方案4】:

      在你的字符串中也放一个分号。

      你从数据库中得到的错误是什么(查看 mysql 日志)

      【讨论】:

      • 没有实际错误,只是没有提交值,但条目是。我将使用表单和所有内容编辑问题。
      • 请在您的答案中添加一些解释,以便其他人可以从中学习。 “在字符串中放一个分号”是什么意思?这如何解决问题?
      【解决方案5】:

      您打算输入字符串 'NULL' 还是 NULL 的值? 如果它是值,那么它不应该用引号引起来。我认为这可能是问题

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多