使用PHP更新MySQL数据库,将所有列设置为0而不是1

时间:2014-02-07 19:28:51

标签: php mysql database

我有一个数据库我正在更新,当我更改一个症状时,我希望它将症状严重性行中的所有值重置为0,但是当我更新该症状时,它设置所有行到0,而不仅仅是那一行。这是我的代码,我在if语句中做到了。如果您知道一种更简单的方法,那么也会非常感激。

我没有使用WHERE,因为我想要更改所有id,而不仅仅是一个,并且它会动态生成它们。我有20个症状,仅在数据库中的ID 1中更新。对不起,如果代码很糟糕,我对此很新。

如果我一次更新所有20个,那很好,但如果我只更新一个或两个,它们都会被设置回0。

mysql_select_db("$database", $conn) or die(mysql_error());

// if statements to delete this and that

$db="$id"."_symp";

$sql2 = "SELECT * FROM $db";

$getit = mysql_query ( $sql2, $conn );

// I know I'm using outdated SQL, but it works for me, so I keep using it
while($row = mysql_fetch_array($getit, MYSQL_ASSOC))
    {
        //symptom 1
        if ($_POST[symptom1] == $row[symptom1]) {
            print " ";
        }
        else {
            mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error()); 
        }

        //symptom 2
        if ($_POST[symptom2] == $row[symptom2]) {
            print " ";
        }
        else {
            mysql_query("UPDATE $db SET symptom2_sev = '0'") OR die(mysql_error()); 
        }

        //symptom 3
        if ($_POST[symptom3] == $row[symptom3]) {
            print " ";
        }
        else {
            mysql_query("UPDATE $db SET symptom3_sev = '0'") OR die(mysql_error()); 
        }
        //and so on to 20

        //symptom 20
        if ($_POST[symptom20] == $row[symptom20]) {
            print " ";
        }
        else {
            mysql_query("UPDATE $db SET symptom20_sev = '0'") OR die(mysql_error()); 
        }

        //end sql stuff
    }

// update the database
$sql="UPDATE $db SET 
        symptom1='$_POST[symptom1]', symptom2='$_POST[symptom2]', symptom3='$_POST[symptom3]',       symptom4='$_POST[symptom4]', symptom5='$_POST[symptom5]', symptom6='$_POST[symptom6]', symptom7='$_POST[symptom7]', symptom8='$_POST[symptom8]', symptom9='$_POST[symptom9]', symptom10='$_POST[symptom10]', symptom11='$_POST[symptom11]', symptom12='$_POST[symptom12]', symptom13='$_POST[symptom13]', symptom14='$_POST[symptom14]', symptom15='$_POST[symptom15]', symptom16='$_POST[symptom16]', symptom17='$_POST[symptom17]', symptom18='$_POST[symptom18]', symptom19='$_POST[symptom19]', symptom20='$_POST[symptom20]' 
    WHERE id=1" OR die(mysql_error()); 

mysql_select_db('$database');
$retval = mysql_query( $sql, $conn );
if(! $retval )
    {
        die('Could not update data: ' . mysql_error());
    }
echo "Updated data successfully\n";

mysql_close($conn);

非常感谢。对不起我就是这样的n00b。或者一个nob,无论你喜欢给我打电话!

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用以下查询一步更新所有症状:

$symptom1 = mysql_real_escape_string($_POST['symptom1']);
$symptom2 = mysql_real_escape_string($_POST['symptom2']);
...
$symptom20 = mysql_real_escape_string($_POST['symptom20']);

$sql = "
    UPDATE $db
    SET symptom1_sev = IF(symptom1 = '$symptom1', 0, symptom1_sev),
        symptom2_sev = IF(symptom2 = '$symptom2', 0, symptom2_sev),
        ...
        symptom20_sev = IF(symptom20 = '$symptom20', 0, symptom20_sev)";

答案 1 :(得分:0)

  

我有一个数据库我正在更新,当我改变一个症状时,   我希望它将症状严重性行中的所有值重置为0,   但是当我更新那个症状时,它将所有行设置为0,   而不只是那一行。

您的代码调用UPDATE而没有WHERE子句。没有UPDATE的{​​{1}}将始终每次更新整个表格中的每个

  

我没有使用WHERE,因为我希望更改所有id,   不只是一个,它正在动态生成它们。   我有20个症状,仅在数据库中的ID 1中更新。   对不起,如果代码很糟糕,我对此很新。

您希望在一个中更新20个?精细。您仍然需要WHERE子句,只需在WHERE语句中添加更多列。 (或者考虑使您的数据库架构更有用)

PS - 如果这仍然听起来不对,请考虑与我们共享您的数据库架构(相关表的表名和列名/类型)。

这些查询中的每一个都是错误的,并且会改变每一行:

UPDATE

最后,如果清除其他行中的严重性你想要什么,那么你永远不会在任何地方实际设置严重性,即使对于当前行也是如此。 (那为什么不总是0?)

e.g。 //symptom 1 if ($_POST[symptom1] == $row[symptom1]) { print " "; } else { mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error()); } 永远不会发生。