PHP插入查询问题(外键)

时间:2016-09-29 17:02:49

标签: php mysql insert

我试图通过php在带有外键的表中插入值。该表称为游戏(ID,title,year,genre,publisher_id)。另一个表不包含外键,如下所示:发布者(ID,公司,地址,奖品,已发布)...

以下是代码:

<h4>Insert new Game</h4>
    <form method="get">    

        <input type="text" name="new-game"                      
            <button type="submit">Submit Game</button>
    </form>

<?php



  if (isset($_GET["new-game"])){
     require("MGconfig.php");

      $newgame= $_GET["new-game"];


      $id= mysqli_query($connection, "select max(id) from games");
      $maxid= mysqli_fetch_row($id)[0]+1;
      $publisher_id=mysqli_query($connection, "select title, company from publisher, games where publisher.id=publisher_id");



      $insert ="insert into games (title, id, publisher_id) values (".$newgame.",".$maxid.",".$publisher_id.")";

      $result=mysqli_query($connection,$insert);

      if (!$result) {
        echo "Erro na query ..." .mysqli_error($connection);
      }
   }


   ?>

我收到此错误(指向$ insert行):可捕获的致命错误:类mysqli_result的对象无法在第127行的C:\ xampp \ htdocs \ PHP \ MG_Dinamico \ admin.php中转换为字符串

这是配置文件:

    <?php

    $user = 'root';
    $pwd = '';
    $server = 'localhost';
    $bdschema = 'MG';


    $connection = mysqli_connect($server,$user, $pwd, $bdschema);

if (mysqli_connect_error()) {
    echo "Error to DB ..." .mysqli_error($connection);
    exit;
};

mysqli_set_charset($connection, "utf8");
//print_r($connection);


?>

我不知道如何将查询工作...建议?提前谢谢!

2 个答案:

答案 0 :(得分:1)

你得到了这个:

$publisher_id=mysqli_query($connection, "select title, company from publisher, games where publisher.id=publisher_id");

返回一个对象,可能是一个数组

并在这一行:

$insert ="insert into games (title, id, publisher_id) values (".$newgame.",".$maxid.",".**$publisher_id**.")";

你没有传递字符串而是传递对象。

我认为这可能是错误

答案 1 :(得分:0)

首先,您必须在查询执行eevn之后进行查询获取,如果它是针对单行或多行数据。

  

注意:另一个重要的事情是,你不能从你所做的select语句中获得id,因为你只选择了发布者的标题,公司,所以你必须在该select语句中也包含id

$publisher_id=mysqli_query($connection, "select id title, company from publisher, games where publisher.id=publisher_id");

之后你必须运行fetch循环以便它获取值,你可以从中选择发布者ID。

<?php
$publisher_id=mysqli_query($connection, "select id title, company from publisher, games where publisher.id=publisher_id");
$count = $publisher_id->num_rows;
if($count==0)
{
    $pub_id='';
}
else
{
    while($row =$publisher_id->fetch_assoc())
    {
        $pub_id = $row['id'];// This will store the publisher ID
    }
}
?>

现在您可以将数据插入到外键表中,以便它具有一些与相应限制匹配的值。

$insert ="insert into games (title, id, publisher_id) values ('".$newgame."','".$maxid."','".$pub_id."')";

假设发布者id在外键关系表中为NULL。

对发布的icenine答案

的建议

注意:建议不要将代码作为答案发布,然后再请求更正。如果您是问题的所有者,则可以直接在该处重新修改问题广告信息。当你在这里时,请遵循SO规则和条例,这些规则和条例有很多人真正希望帮助有需要的人。

错误:1

问题:

  

注意:尝试在第125行的C:\ xampp \ htdocs \ PHP \ MG_Dinamico \ admin.php中获取非对象的属性。

您所做的以下选择查询将永远不会有效。

  $publisher_id=mysqli_query($connection, "select id, title, company from publisher, games where publisher.id=publisher_id");

此错误来自admin.php,因为您没有从上面的select语句中获取任何值。

回答说明:

因为在Where条件中你使用publisher.id=publisher_id这是完全不可取的。您不会在查询中获得任何publisher_id,查询将返回FALSE。请按照此行下方的说明检查您的声明中的错误,然后继续。

确保您在此处拥有正确的查询,然后您的整个代码都能正常运行。

  

注意:首先将echo放入Select语句,然后通过退出来中断执行;然后复制回显的语句并将其放在DB的SQL中,然后检查插入中是否发生错误。如果没有错误发生,请删除echo并删除退出;

从上述查询中获得结果后,您将获得发布者ID,之后您可以将数据插入另一个表中。

错误:2

根据给出的建议(外键表)更改插入查询,您缺少表格列值的刻度。

现在您可以将数据插入到外键表中,以便它具有一些与相应限制匹配的值。

$insert ="insert into games (title, id, publisher_id) values ('".$newgame."','".$maxid."','".$pub_id."')";

假设发布者id在外键关系表中为NULL。

因为有时可能没有关系ID。