检查所选行中列的所有值

时间:2015-03-27 05:59:03

标签: php mysql

我想知道所选行的所有列是否具有相等的值。如果所有值都相同,我想执行一些操作。

id (tableA)   id2 (reference tableB) status
-------------------------------------------
     1               2               On 
     2               2               Off
     3               3               On
     4               3               On

如果id2 = 3具有相同的status {// perform action here}值。 如何检查id = 3的值然后在这里执行一些操作?我正在使用mysql和php。

我不知道我做得对不对:

$change = mysql_query("SELECT status from  tableA where status =   'On' and id=3 ");
if ($change == 'On')// if all the columns

{ mysql_query("  UPDATE tableB 
         SET status2 = 'On Going' where id2 =3")or die(mysql_error());
}

结果应在表B中更新:

id    status2
---------------
3     On Going

2 个答案:

答案 0 :(得分:0)

$change = mysql_query("SELECT `stat` from  `order_details` 
          where `stat` =  'Cancelled'");
$res=mysql_fetch_array($change);

请记住,如果您想要循环

时必须使用的所有记录,它将仅从数据库中获取最后一个值
    if ($res == "Cancelled")
{


         mysql_query("UPDATE `order1` 
                 SET `status` = 'Cancelled' where `order_id` ='".$order_id."'")or die(mysql_error());
    }

试试这个......

答案 1 :(得分:0)

  • 您可能希望使用PHP的mysql_num_rows()功能来实现目标。
  • 您确定status列名称与stat列名称不同吗?他们不是同一个栏目?
  • 使用勾号(')对查询中的变量进行参数化。
  • 至少使用mysql_real_escape_string()功能。
  • 您应该练习mysqli_* prepared statement而不是弃用的mysql_*来阻止SQL injections

您修改后的代码:

$change = mysql_query("SELECT stat FROM order_details WHERE stat = 'Cancelled'");
if (mysql_num_rows($change) == 1){ /* IF THE QUERY FOUND 1 RESULT */
  mysql_query("UPDATE order1 SET status = 'Cancelled' WHERE order_id = '$order_id'") or die(mysql_error());
}

如果您要在准备好的声明中这样做:

if($stmt = $YourConnectionDB->prepare("SELECT stat FROM order_details WHERE stat = 'Cancelled'")){

  $stmt->execute();
  $stmt->store_result();
  $numberofrows = $stmt->store_result();

  if($numberofrows == 1){
    if($stmt2 = $YourConnectionDB->prepare("UPDATE order1 SET status = 'Cancelled' WHERE order_id = ?")){
      $stmt2->bind_param("i",$order_id);
      $stmt2->execute();
      $stmt2->close();
    } /* END OF SECOND PREPARED STATEMENT */
  } /* END OF CHECKING NUMBER OF ROWS */

  $stmt->close();
} /* END OF PREPARED STATEMENT */