Php 数据库中插入的值为0,即使不应为

Php 数据库中插入的值为0,即使不应为,php,mysql,Php,Mysql,我知道我在这里遗漏了一些愚蠢的东西,但每次在下面的代码中执行其他代码时,0都会添加到我的列grupa_id,它的注释prikaz plana下,而实际上它应该从另一个名为grupa的表中选择max id。当出现“If”时,一切正常,在数据库中插入正确的数据,即使在Else中,当我输入“select MAXid FROM grupa”而不是变量$dataId时,也会插入正确的数据。有人能看到我在这里遗漏了什么吗 $dataId; $Data = $ks->getQue

我知道我在这里遗漏了一些愚蠢的东西,但每次在下面的代码中执行其他代码时,0都会添加到我的列grupa_id,它的注释prikaz plana下,而实际上它应该从另一个名为grupa的表中选择max id。当出现“If”时,一切正常,在数据库中插入正确的数据,即使在Else中,当我输入“select MAXid FROM grupa”而不是变量$dataId时,也会插入正确的数据。有人能看到我在这里遗漏了什么吗

$dataId;
            $Data = $ks->getQuery("SELECT id, naziv from grupa WHERE naziv='$postNazivGrupe'");
            if($Data->num_rows>0)
            {
                while($Row = $Data->fetch_assoc())
                {
                    $dataId = $Row['id'];               
                }
            }
            else
            {

                $Data = $ks->getQuery("INSERT into grupa(oznaka_grupe, naziv, nadgrupa) VALUES ('$postOznaka_grupe', '$postNazivGrupe', '$postNazivNadgrupe')");
                $dataId ="(select MAX(id) FROM grupa)";
            }


            ##upis plana
            $Data = $ks->getQuery("UPDATE plan SET grupa_id='$dataId' WHERE id=$postID");

在else情况下,生成的数据ID无效

$dataId ="(select MAX(id) FROM grupa)";
如果该数据ID无效,则该查询的结果将为。前面的答案是正确的,不知道为什么会被删除

这使得您的查询变成了这样

"UPDATE plan SET grupa_id='(select MAX(id) FROM grupa)' WHERE id=$postID"
如果这是您想要的,请删除该变量周围的单引号。使用单引号时,不会执行该子查询,并尝试将整个查询作为值,但由于该字段是数字字段,因此会将其转换为0。删除更新查询中$dataId周围的单引号

这个版本很好

"UPDATE plan SET grupa_id=(select MAX(id) FROM grupa) WHERE id=$postID"

grupa_id是一个varchar列,对吗?您很容易受到SQL注入及其int列的攻击@Dallin谢谢你的发帖人我知道,这只是本地主机项目,所以我没有花太多精力去保护它。。。全部重写。是的,这就是我想要的,删除引号非常有效。谢谢因为OP sad:所以如果发生'else',grupa_id应该是:从grupa中选择MAXid,我想,他想插入这个字符串,而不是查询结果。