如何解决“无法添加或更新子行”

时间:2015-12-01 07:20:30

标签: php mysql

我在尝试插入数据库时​​遇到了一些错误,主要关注的是我不断收到错误:

  

无法添加或更新子行

这是我的用户表:

users:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | NO   |     |         |                |
| email    | varchar(25) | NO   |     |         |                |
| avatar   | varchar(60) | NO   |     |         |                |
| username | varchar(25) | NO   |     |         |                |
| password | varchar(25) | NO   |     |         |                |
| about    | text        | NO   |     |         |                |
+----------+-------------+------+-----+---------+----------------+

这里我只有一个条目,它是索引1

这是我的categoryf表:

categoryf:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | NO   |     |         |                |
| descri   | text        | NO   |     |         |                |
+----------+-------------+------+-----+---------+----------------+

这里我也有1个条目,还有索引1

这是主题类别:

topic:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| c_id     | int(11)     | NO   |     |         |                |
| user_id  | int(11)     | NO   |     |         |                |
| avatar   | varchar(60) | NO   |     |         |                |
| title    | varchar(25) | NO   |     |         |                |
| body     | text        | NO   |     |         |                |
+----------+-------------+------+-----+---------+----------------+

c_id(category_id)user_id是表categoryfuser

的外键的位置

这是我使用的表格:

 <form method="post" action="create.php">
          <div class="form-group">
            <label>Наслов</label>
            <input type="text" name="title" class="form-control">
          </div>
          <div class="form-group">
            <label>Вашата Дискусија</label>
            <textarea class="form-control" name="post_text" rows="10" cols="80"></textarea>
            <script>CKEDITOR.replace('post_text');</script>
          </div>
          <div class="form-group">
            <label>Категорија</label>
            <select class="form-control" name="category">
              <?php foreach(Categoryf_id() as $category) : ?>
              <option><?php echo $category['name']; ?></option>
            <?php endforeach ;?>
            </select>
          </div>
          <button type="submit" name="post" class="btn btn-primary">Креирајте Дискусија</button></a>
        </form>

其中Categoryf_id是:

function Categoryf_id()
{
$db = new Database();

//Create Query Category name
$query="SELECT * FROM categoryf";

//Run Query Category name
$row=$db->select($query);

return $row;
}

最后我的帖子功能:

function Post()
{

$db=new Database();

if(isset($_POST['post']))
{
$title = mysqli_real_escape_string($db->link, $_POST['title']);
$post_text = mysqli_real_escape_string($db->link, $_POST['post_text']);
$category = mysqli_real_escape_string($db->link, $_POST['category']);
}
$query= "INSERT INTO topic
        (category_id, user_id, title, body) 
    VALUES('$category', '".$_SESSION['id']."', '$title', '$post_text')";

$insert_row = $db->insert($query);
}

我知道我的查询是正确的,因为我在phpmyadmin中使用它来添加一个主题,其中使用的id仅为1,但在这里我得到这些错误:

Notice: Undefined variable: category in /opt/lampp/htdocs/PHP-    Wizard/helpers/query.php on line 132

Notice: Undefined variable: title in /opt/lampp/htdocs/PHP-Wizard/helpers/query.php on line 132

Notice: Undefined variable: post_text in /opt/lampp/htdocs/PHP-Wizard/helpers/query.php on line 132
Cannot add or update a child row: a foreign key constraint fails (`PHPWizard`.`topic`, CONSTRAINT `topic_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categoryf` (`id`))47

我甚至试图用mysql_query('SET foreign_key_checks = 0');删除外键检查,但没有运气。

我在Stack Overflow上搜索了其他问题,也没有运气。

是什么导致了这个问题,我该如何解决?

如果这篇帖子很长,我也很抱歉,但我想我需要显示这部分的所有代码,如果有人要帮我的话。

3 个答案:

答案 0 :(得分:2)

我怀疑在layout_weight定义为$category时将topic.category_id作为字符串处理可能会让您感到悲伤。将您的查询更改为准备好的语句(出于此原因以及众多其他原因),如下所示:

INT(11)

这允许驱动程序层自动处理引用,转义特殊字符和数据类型匹配。

希望有所帮助。

答案 1 :(得分:1)

存在可变范围问题,
请定义

function Post()
{
    $title = ''; 
    $post_text = '';
    $category = '';
$db=new Database();

if(isset($_POST['post']))
{
$title = mysqli_real_escape_string($db->link, $_POST['title']);
$post_text = mysqli_real_escape_string($db->link, $_POST['post_text']);
$category = mysqli_real_escape_string($db->link, $_POST['category']);
}
$query= "INSERT INTO topic
        (category_id, user_id, title, body) 
    VALUES('$category', '".$_SESSION['id']."', '$title', '$post_text')";

$insert_row = $db->insert($query);
}

答案 2 :(得分:0)

我修好了。

事实证明,在我的html中,在选项部分我将其设置为<option value="<?php echo $category['name'],而不是<option value="<?php echo $category['id']。我想当我设置按钮时,它正在寻找一个字符串而不是一个整数。傻傻的我