我试图通过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);
?>
我不知道如何将查询工作...建议?提前谢谢!
答案 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。
注意:建议不要将代码作为答案发布,然后再请求更正。如果您是问题的所有者,则可以直接在该处重新修改问题广告信息。当你在这里时,请遵循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。