更新:[MySQL不会在Where条件PHP中更新]

时间:2013-12-03 07:58:58

标签: php mysql

我刚刚更新了这个问题。 每当我在我的WHERE条件上放置变量$ ecode时,我似乎无法更新我的数据库。但是,当我回应这个变量时,它总是回应它的正确价值。

<?php
    require 'sqlicon.php';
    $q=$_GET['q'];
    $ecode= $_GET['ecode'];
    echo"".$ecode;
    $result=$db->query("UPDATE offset_form SET Approved='".$q."' WHERE Employee_Code='".$ecode."'");
?>

这是sqlicon.php的内容:

<?php
    $db=new mysqli('localhost','root','',dbuser'); //localhost,username,password, dbname
?>

这是我获取$ q和$ ecode日期的地方:对不起,如果它还没有在mysqli中。

testingjava.php:

<html>
<title> Offset Requests </title>
<head><link rel="stylesheet" type="text/css" href="up.css"/></head>
<script>
    function Approval() {
        var name;
        name=document.getElementById('ename').textContent;
        if(document.form1.approval[0].checked   true) { 
            alert(name);
            window.location.href = "sqli.php?q=Yes"  + "&ecode=" + name;
        }
    }
</script>
<body>
    <form id="form1" name="form1" method="post" action="testingjava.php"> 
    <?php
        $conn = mysql_connect("localhost","root","");
        if(!$conn)
            echo ("Could not connect");

        mysql_select_db("dbuser",$conn);
        $query=mysql_query("Select * from offset_form where Approved=''");
        while($fetch=mysql_fetch_array($query)) {
            $ecode=$fetch['Employee_Code'];
            //$_SESSION['ecode']=$ecode;
            $ename=$fetch['Employee_Name'];
            $epos=$fetch['Employee_Position'];
            $edpt=$fetch['Employee_Department'];
            $dleave=$fetch['Date_Leave'];
            $dreturn=$fetch['Date_Return'];
            $reason=$fetch['Offset_Reason'];

            echo "".$ecode ."".$ename." ".$epos." ".$edpt." ".$dleave." ".$dreturn." ".$reason;
            echo "<input type='radio' name='approval' onChange='Approval()'>Yes";
            echo "<input type='radio' name='approval'>No";
            echo "<input type='text' name='remarks' size='30'>";
            echo"<hr id='br'></hr>";
            echo"<input type='submit' value='Submit' name='send' onClick='Approval()'>";
        }
    ?>
    </form>
</body>
</html>

我只是在触发单选按钮时测试操作数据库。

5 个答案:

答案 0 :(得分:3)

1)你应该使用mysql_real_escape_string($ _ GET [])或者向你的系统注入一个mysql命令的人,比如DROP TABLE,这将是你数据库的结尾。

2)其次,我会转而使用PHP PDO,它更安全,速度更快(很长一段时间)。

3)从

改变你的第二行到最后一行
mysql_query($sql,$conn); 

mysql_query($sql,$conn) or die(mysql_error()." _____is the string correct? ".$sql);

然后应该回显任何错误,如果你发布回应错误,我们可以解决它

看了之后我猜测问题是你错过了$ q周围的..所以$ sql包含字符串“$ q”而不是分配给变量$ q的字符串

试试这个

$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");

答案 1 :(得分:0)

试试这个..

     $sql=("update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");

总是尝试回应您的查询,看看您的查询出了什么问题..

答案 2 :(得分:0)

如果密码设置为dbms,则提供第三个param passwrod

$conn = mysql_connect("localhost","root","<passwrod>"); 

或者如果未设置passwrod,则可以将其留空。 并尝试这个

$sql="update offset_form set Approved =$q where Employee_Code=$ecode";

$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'";

注意:双引号将解析php变量, 最有可能的是你所使用的报价方式存在问题。

答案 3 :(得分:0)

您的查询是否符合要求?

令人困惑的一件事是你注释掉了这个:

"INSERT INTO offset_form (Approved) VALUES ('".$ecode."')"

然后你将此作为更新:

"UPDATE offset_form SET Approved = '$q' WHERE Employee_Code = '".$ecode."'"

您使用的值不符合要求。当然你应该:

"UPDATE offset_form SET Approved = '$q' where Approved = '".$ecode."'"

这是因为您要将$ecode插入到列Approved中,然后在名为$ecode的另一列中搜索Employee_Code。也许您需要修改insert语句?那个或$ecode可能只是在不同的时间代表两个不同的值?

报价

如果您的嵌入值本身包含引号,则切换引号的唯一方法就会产生影响。在这种情况下,使用正确的escape函数将对问题进行排序。所以你可以自由使用:

"UPDATE offset_form SET Approved = '$q' where Approved='$ecode'"

或:

"UPDATE offset_form SET Approved = '".$q."' where Approved = '".$ecode."'"

或:

'UPDATE offset_form SET Approved = "'.$q.'" where Approved = "'.$ecode.'"'

但不是:

'UPDATE offset_form SET Approved = "$q" where Approved = "$ecode"'

前三个中的任何一个都不应该有所作为。

还有待完成的事情

反引号

作为一项规则,我总是使用反引号编写查询转义表名和列名,以确保我不会意外地使用保留字:

"UPDATE `offset_form` SET `Approved`='$q' WHERE `Employee_Code`='".$ecode."'"
仔细检查数据集

确保您尝试在PHP中运行的同一查询在您的dbms中运行。这包括在PHP中回显查询,然后通过PHPMyAdmin,Navicat或您在编码之外访问数据库时使用的任何内容执行它。例如,具有硬编码值的查询,如果这不起作用,则在查询或数据库设计中存在与PHP无关的逻辑问题:

"UPDATE offset_form SET Approved='13' WHERE Employee_Code='12'"
检查空白区域

有时候看起来应该正常运行的查询存在问题,因为列值包含意外的不可见空格。如果是这样,他们只能使用以下内容进行选择:

"UPDATE offset_form SET Approved='$q' WHERE Employee_Code LIKE '%".$ecode."%'"
检查用户权限

确保您的MySQL用户能够执行您正在尝试的查询类型,这意味着允许SELECT,INSERT和UPDATE查询。

声明

正如其他人已经说过的那样,您应该升级到非弃用的数据库访问方法。如果没有,您至少应该使用mysql_real_escape_string来更好地防范恶意。

答案 4 :(得分:0)

请调试$ q的值并尝试运行此代码:

session_start();
    $q=$_GET['q'];
    $ecode=$_GET['ecode'];
    $conn = mysql_connect("localhost","root","");
    if(!$conn)
        echo ("Could not connect");

    mysql_select_db("asiantech",$conn);
    echo"".$ecode;
    echo"<br>".$q;
    $sql="update offset_form set Approved ='".mysql_real_escape_string($q)."' where Employee_Code='".$ecode."'";
    //$sql = "INSERT INTO offset_form (Approved) VALUES ('".$ecode."')";
    mysql_query($sql,$conn);