【问题标题】:sql command INSERT INTO not workingsql命令INSERT INTO不起作用
【发布时间】:2015-08-21 19:53:13
【问题描述】:

我正在创建一个网站,但在将表单中的数据插入我的数据库时遇到了错误(使用 phpMyAdmin)。 它只是提出了自定义错误'错误','对不起,您的注册失败。请返回并重试。'

我已经查看了许多其他具有相同问题的问题,但我找不到与我的问题相对应的答案。

<?php include "base.php"; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  

<div id="main">
 <?php

if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Email']))
{
    $PlanSize = mysql_real_escape_string($_POST['PlanSize']);
    $DatePaid = mysql_real_escape_string($_POST['DatePaid']);
    $AmountPaid = mysql_real_escape_string($_POST['AmountPaid']);
    $MonthUsage = mysql_real_escape_string($_POST['MonthUsage']);
     
     	// $currentUser = mysql_query('SELECT * FROM User WHERE Email = "'. mysql_real_escape_string($_SESSION['Email']) . '"') or trigger_error(mysql_error());
     
     	$currentUser = ($_SESSION['Email']);
        $registerquery = mysql_query("INSERT INTO Plan (PlanSize, DatePaid, AmountPaid, MonthUsage, PlanUserID) VALUES('".$PlanSize."','".$DatePaid."','".$AmountPaid."', '".$MonthUsage."','".$currentUser."')");
        if($registerquery)
        {
            echo "<h1>Success</h1>";
            echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
        }
        else
        {
            echo "<h1>Error</h1>";
            echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
        }       
     }

    ?>
    <form method="post" action="Plans.php">
	<table class="bill">
	<input type="hidden" name="data" value="true" />
    <fieldset>
    	<p>
    	<select name="PlanSize" id="PlanSize" placeholder="Plan Size"/>
			<option value="Small">Small</option>
			<option value="Medium">Medium</option>
			<option value="Large">Large</option>
			<option value="Extra Large">Extra Large</option>
		</select><p>

    	<input type="text" name="DatePaid" id="DatePaid" placeholder="Date Paid (YYYY-MM-DD)"/><br />
        <input type="text" name="AmountPaid" id="AmountPaid" placeholder="Amount Paid"/><br />
      	<input type="text" name="MonthUsage" id="MonthUsage" placeholder="Data Used"/><br />
        <input type="submit" name="Submit" id="Submit" value="Submit" />
    </fieldset>
	</table>
    </form>
  
</center>

</div>
</body></html>

注意:我的base.php文件是用来连接数据库的,功能齐全;我已经使用 base.php 实现了其他数据库数据插入,所以我知道这不是问题的根源。

非常感谢您的任何帮助

【问题讨论】:

  • 不要使用mysql_ functions - 主要是因为 SQL 注入,尽管这也可能有助于您处理错误。你想知道那个过时的代码失败了,然后看看:mysql_error
  • @ficuscr 是对的,但如果你坚持使用它(不推荐),请将or die (mysql_error()); 附加到你的mysql_query() 以获得更准确的错误
  • 无法添加或更新子行:外键约束失败 (hb00294.bill, CONSTRAINT bill_ibfk_1 FOREIGN KEY (PlanUserID) REFERENCES User (UserID) ) - 添加或死亡!感谢您提供或死的提示。不知道如何处理。
  • @Hans 如果外键定义为NOT NULL,那么您必须在INSERT 查询中提供它。尝试在您的数据库表中进行更改,例如ON DELETE RESTRICT ON UPDATE CASCADE
  • 我必须提供它,即使我将它指定为 AUTO_INCREMENT?另外,如何使表像 ON DELETE RESTRICT ON UPDATE CASCADE 一样?我是否将 CREATE TABLE 更改为 (BillID INT NOT NULL ON DELETE RESTRICT ON UPDATE CASCADE UNIQUE AUTO_INCREMENT, ?

标签: php mysql sql database


【解决方案1】:

试一试:

$registerquery = mysql_query("INSERT INTO `Plan` (`PlanSize`, `DatePaid`, `AmountPaid`, `MonthUsage`, `PlanUserID`) 
 VALUES('$PlanSize', '$DatePaid', '$AmountPaid', '$MonthUsage','$currentUser')");

此外,您确定将正确的values 插入到它们各自的列中吗? $currentUser 真的应该进入PlanUserID 列吗?

在cmets讨论后:

既然您启用了FK 约束,它应该可以工作,但让我们检查一些事情:

  • 父表列和子表列应具有相同的数据类型。
  • 确保子表的列中没有任何值 不存在于您的父表的列中。
  • 两个表应具有相同的排序规则。
  • 你的两个表都应该是 InnoDB。

您可以这样做:

SHOW TABLE STATUS WHERE Name =  'table1';
ALTER TABLE table1 ENGINE=InnoDB;

如果一切都失败了,您可以随时备份您的父母和孩子 先表,然后truncate子表并尝试建立关系 再次。

您可以随时通过此处提供的类似问题了解更多信息:MySQL - Cannot add or update a child row: a foreign key constraint fails

【讨论】:

    【解决方案2】:

    看起来您还没有检查 $_POST 数组中是否存在“PlanSize”和其他内容。 考虑到您可以只为经过身份验证的用户重新加载页面,而无需通过 post 方法发送数据。因此,您进入了第一个条件,但不会在 POST 数组中创建诸如“PlanSize”之类的索引。 事先检查 isset:

    $planSize = isset($_POST['PlanSize'])? $_POST['PlanSize'] : null;

    【讨论】:

    • 我在 $PlanSize = mysql_real_escape_string($_POST['PlanSize']); 之前添加了这个但不幸的是仍然收到相同的错误。
    【解决方案3】:

    这样试试

    $registerquery = mysql_query("INSERT INTO `Plan` (`PlanSize`, `DatePaid`, `AmountPaid`, `MonthUsage`, `PlanUserID`) VALUES('$PlanSize','$DatePaid','$AmountPaid', '$MonthUsage','$currentUser')");
    

    【讨论】:

    • 现在收到以下错误:注意:未定义索引:第 102 行 /Applications/XAMPP/xamppfiles/htdocs/plans.php 中的 PlanSize 注意:未定义索引:/Applications/XAMPP/xamppfiles/ 中的 DatePaid htdocs/plans.php 在第 103 行 注意:未定义索引:AmountPaid 在 /Applications/XAMPP/xamppfiles/htdocs/plans.php 在第 104 行 注意:未定义索引:MonthUsage 在 /Applications/XAMPP/xamppfiles/htdocs/plans.php 上第 105 行以及其他两个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2016-05-20
    • 2020-09-02
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多