我正在尝试存储一个查询$ sql的结果,并在第二个查询$ sql1中使用此结果。
$ sql选择clear列中的值,并将其存储在$ result中。
$ sql1应该更新从$ sql找到的列,并将该列的值切换为NOT $ result,boolean column。
我需要这个的原因是因为我正在更新的列取决于列clear的值,其中包含各列的名称。这些列也都在同一个表中。
<?php
$userIdentity = $_SESSION['userIdentity'];
$sql = "SELECT clear FROM UserInfo WHERE userIdentity = '$userIdentity'";
$result = $dbc->query($sql);
$sql1 ="UPDATE UserInfo SET $result = NOT $result WHERE userIdentity = '$userIdentity'";
$result1 = $dbc->query($sql1);
?>
答案 0 :(得分:0)
由于$dbc
是mysqli
对象,mysqli::query()会在成功查询时返回mysqli_result个对象。这意味着$result
不会是您期望的单一值;相反,它将成为一个对象,代表对查询的整个响应。
您需要执行以下操作才能真正获得clear
列的值:
$result = $dbc->query($sql);
$row = $result->fetch_object(); //get the first row from the result
$clear = $row->clear;
然后,您可以使用$clear
在第二个查询中更新数据库。 (您不能在一个查询中轻松执行此操作,因为您要修改的列取决于数据库中行的值。完全在一个查询中执行此操作可能是可能的,但可能也比它的值更麻烦。)
注意事项:
$clear
和$userIdentity
直接传递给sql查询,确实存在潜在的SQL注入漏洞。对于$userIdentity
,您应该使用参数化查询(这意味着您无法使用mysqli::query()
;有关如何执行此操作的示例,请参阅mysqli::prepare。由于$clear
用作列名,并且您无法对列名进行参数化,因此您需要格外小心以确保其有效。