【问题标题】:mysql insert query is not working [closed]mysql插入查询不起作用[关闭]
【发布时间】:2012-04-24 17:11:39
【问题描述】:

我有这个页面插入来自 html 表单的数据。没有显示错误,但也没有插入数据。这是我给出的代码。

<?php 
mysql_connect("localhost","root","");
mysql_select_db("hcp");

$queryUserType = "select * from user_type";
$resultUserType = mysql_query($queryUserType) or die(mysql_error());

$queryTitle = "select * from name_titles";
$resultTitle = mysql_query($queryTitle) or die(mysql_error());

$time = time();
$date = date("d-m-y");
$nowDateTime=$time.$date;

if($_REQUEST['btnUserSubmit'])
{
    $queryInsertUser="INSERT INTO  users (`title_id`, `first_name`, `last_name`, `email`, `utid`, `residence_address1`, `residence_address2`, `residence_city`, `residence_state`, `residence_country`, `residence_zipcode`, `phone_no`, `username`, `password`, `created`, `date_of_birth`, `gender` ) VALUES ('".mysql_real_escape_string($_REQUEST['$rowTitle[0]'])."', '".mysql_real_escape_string($_REQUEST['txtFirstName'])."', '".mysql_real_escape_string($_REQUEST['txtLastName'])."', '".mysql_real_escape_string($_REQUEST['txtEmail'])."', '".mysql_real_escape_string($_REQUEST['rowUserType[0]'])."', '".mysql_real_escape_string($_REQUEST['txtAddressLine1'])."', '".mysql_real_escape_string($_REQUEST['txtAddressLine2'])."', '".mysql_real_escape_string($_REQUEST['txtCity'])."', '" .mysql_real_escape_string($_REQUEST['txtState'])."', '".mysql_real_escape_string($_REQUEST['txtCountry'])."', '".mysql_real_escape_string($_REQUEST['txtPhone'])."', '".mysql_real_escape_string($_REQUEST['txtUserName'])."', '".mysql_real_escape_string($_REQUEST['txtUserPassword'])."', '".$nowDateTime."', '".mysql_real_escape_string($_REQUEST['txtdateofbirth'])."', '".mysql_real_escape_string($_REQUEST['rdGender'])."');";

$resultinsert=mysql_query($queryInsertUser) or die(mysql_error());
}
?>

我在页面重定向的地方没有任何问题。表单验证仍然存在。在这个表中,只有 email、utid、username、password 这四个字段不为空。其余为 Null 允许的。

【问题讨论】:

  • 将帮助我们/您打印 INSERT 请求的内容。
  • 把它放在你的脚本顶部error_reporting(1); 并检查它是否给出任何错误
  • 读到这里就头疼。

标签: php mysql insert


【解决方案1】:

如您所见,您的缺失字段 11,见下文:

<?php
$QueryCol   = array('title_id',             // Field 1
                    'first_name',           // Field 2
                    'last_name',            // Field 3
                    'email',                // Field 4
                    'utid',                 // Field 5
                    'residence_address1',   // Field 6
                    'residence_address2',   // Field 7
                    'residence_city',       // Field 8
                    'residence_state',      // Field 9
                    'residence_country',    // Field 10
                    'residence_zipcode',    // Field 11
                    'phone_no',             // Field 12
                    'username',             // Field 13
                    'password',             // Field 14
                    'created',              // Field 15
                    'date_of_birth',        // Field 16
                    'gender');              // Field 17

$QueryData  = array((isset($_REQUEST[$rowTitle[0]])      ? $_REQUEST[$rowTitle[0]]          : null),    // Field 1
                    (isset($_REQUEST['txtFirstName'])    ? $_REQUEST['txtFirstName']        : null),    // Field 2
                    (isset($_REQUEST['txtLastName'])     ? $_REQUEST['txtLastName']         : null),    // Field 3
                    (isset($_REQUEST['txtEmail'])        ? $_REQUEST['txtEmail']            : null),    // Field 4
                    (isset($_REQUEST[$rowUserType[0]])   ? $_REQUEST[$rowUserType[0]]       : null),    // Field 5
                    (isset($_REQUEST['txtAddressLine1']) ? $_REQUEST['txtAddressLine1']     : null),    // Field 6
                    (isset($_REQUEST['txtAddressLine2']) ? $_REQUEST['txtAddressLine2']     : null),    // Field 7
                    (isset($_REQUEST['txtCity'])         ? $_REQUEST['txtCity']             : null),    // Field 8
                    (isset($_REQUEST['txtState'])        ? $_REQUEST['txtState']            : null),    // Field 9
                    (isset($_REQUEST['txtCountry'])      ? $_REQUEST['txtCountry']          : null),    // Field 10
                                                                                                        // Field 11
                    (isset($_REQUEST['txtPhone'])        ? $_REQUEST['txtPhone']            : null),    // Field 12
                    (isset($_REQUEST['txtUserName'])     ? $_REQUEST['txtUserName']         : null),    // Field 13
                    (isset($_REQUEST['txtUserPassword']) ? $_REQUEST['txtUserPassword']     : null),    // Field 14
                    $nowDateTime,                                                                       // Field 15
                    (isset($_REQUEST['txtdateofbirth'])  ? $_REQUEST['txtdateofbirth']      : null),    // Field 16
                    (isset($_REQUEST['rdGender'])        ? $_REQUEST['rdGender']            : null);    // Field 17

foreach($QueryData as $Key => $Value){
    $QueryData[$Key] = mysql_real_escape_string($Value);
}

$QueryInsertUser    =   'INSERT INTO users (`'.implode('`, `', $QueryCol).'`)'.
                        'VALUES ("'.implode('", "', $QueryData).'")';
$resultinsert       =   mysql_query($QueryInsertUser)
                        or die(mysql_error());

?>

提示:

  1. 停止使用 $_REQUEST。使用 $_GET 或 $_POST
  2. 避免像以前那样使用大线。您无法快速找到错误。
  3. 使用数组编写更少的代码。
  4. 使用array_walk 函数将函数映射到数组中的每个条目。
  5. 让您的代码更易读、更易于调试
  6. $_REQUEST['$Blabla'] 这样的变量不起作用,因为使用 ' 对解析变量不起作用,请使用 " 而不是像 $_REQUEST["{$Blabla}"] 这样。但是,避免这种情况,因为 PHP 需要解析意味着需要更多的动力,使用 @改为 987654326@。
  7. 在开发过程中,我建议在您的脚本顶部添加以下几行:

    error_reporting(-1);
    ini_set('display_errors', 'On');
    

    它将显示所有错误。即使不是真正的错误。它将帮助您编写可以在任何地方工作的完美代码和标准代码。

  8. 对于每个 $_POST、$_GET、$_REQUEST、$_FILES 等,请使用函数 isset,因为它会产生错误。
  9. 请记住,每个错误都会使页面加载时间加倍。尝试创建一个页面,假设 10000 行没有错误,平均可能是 0.01 秒。每行有一个错误,可能需要 0.5 秒。请注意。

【讨论】:

  • @Gerep 谢谢,我只是花时间去做。默认情况下,这应该在编写代码时完成,这样调试起来非常容易,而且速度更快。此外,您还可以避免一些愚蠢的错误,例如丢失 , ; ) ( 或其他任何东西。但是,我会推荐使用 PDO,更安全、更快地编写。也需要更少的调试。
  • 感谢@DavidBélanger。你的每一个提示对我来说都是一个教训。但我还没有完成。我正面临这个“警告:mysql_real_escape_string() 期望参数 2 是资源,在第 59 行的 C:\wamp\www\HCP\login.php 中给出的整数”?
  • @decoyer 试试我的更新。另外不要忘记添加缺少的字段 11(邮政编码)
  • 添加了缺失的字段。但仍然说:“列数与第 1 行的值计数不匹配”......我有一个初级键 'id'。这是自动递增的。是不是有问题?
  • @decoyer 否。您确定所有字段都以正确的名称存在吗?
【解决方案2】:

你试过改变吗

if($_REQUEST['btnUserSubmit'])

if (isset($_POST['btnUserSubmit']))

?

编辑!

我也认为在您的 INSERT 查询结束时

'".mysql_real_escape_string($_REQUEST['rdGender'])."');";

你可以替换为:

'".mysql_real_escape_string($_REQUEST['rdGender'])."')"; // Lose the ; after "')

你为什么不直接使用 $_POST[];而不是 $_REQUEST[]; ?

【讨论】:

  • 该;最后是可选的。见:dev.mysql.com/doc/refman/5.0/en/entering-queries.htmlA command normally consists of an SQL statement followed by a semicolon. (There are some exceptions where a semicolon may be omitted. QUIT, mentioned earlier, is one of them. We'll get to others later.)
【解决方案3】:

尝试删除行尾的第一个分号,使其如下所示:

...($_REQUEST['rdGender'])."')";

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多