存储查询结果并在另一个查询中使用

时间:2016-01-08 07:44:12

标签: php mysql

我正在尝试存储一个查询$ 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); 

?>

1 个答案:

答案 0 :(得分:0)

由于$dbcmysqli对象,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在第二个查询中更新数据库。 (您不能在一个查询中轻松执行此操作,因为您要修改的列取决于数据库中行的值。完全在一个查询中执行此操作可能是可能的,但可能也比它的值更麻烦。)

注意事项:

  • 如果查询没有返回任何行,则$ row将为null。所以你需要检查一下。
  • 请注意,通过将$clear$userIdentity直接传递给sql查询,确实存在潜在的SQL注入漏洞。对于$userIdentity,您应该使用参数化查询(这意味着您无法使用mysqli::query();有关如何执行此操作的示例,请参阅mysqli::prepare。由于$clear用作列名,并且您无法对列名进行参数化,因此您需要格外小心以确保其有效。